Tùy thuộc vào mức độ bạn thích cú pháp truy vấn linq, bạn có thể sử dụng các phương thức mở rộng trực tiếp như:
var item = Items.First(i => i.Id == 123);
Và nếu bạn không muốn gặp lỗi nếu danh sách trống, hãy sử dụng FirstOrDefault
giá trị này trả về giá trị mặc định cho loại phần tử ( null
đối với các loại tham chiếu):
var item = Items.FirstOrDefault(i => i.Id == 123);
if (item != null)
{
// found it
}
Single()
và SingleOrDefault()
cũng có thể được sử dụng, nhưng nếu bạn đang đọc từ cơ sở dữ liệu hoặc thứ gì đó đã đảm bảo tính duy nhất, tôi sẽ không bận tâm vì nó phải quét danh sách để xem có bất kỳ bản sao và ném nào không. First()
và FirstOrDefault()
dừng ở trận đấu đầu tiên, để chúng hoạt động hiệu quả hơn.
Về gia đình First()
và Single()
gia đình, đây là nơi họ ném:
First()
- ném nếu trống / không tìm thấy, không ném nếu trùng lặp
FirstOrDefault()
- trả về mặc định nếu trống / không tìm thấy, không ném nếu trùng lặp
Single()
- ném nếu trống / không tìm thấy, ném nếu tồn tại bản sao
SingleOrDefault()
- trả về mặc định nếu trống / không tìm thấy, ném nếu bản sao tồn tại
Single()
vàSingleOrDefault()
NẾU tôi biết dữ liệu đã là duy nhất (ví dụ: từ cơ sở dữ liệu có ràng buộc đó, v.v.), vìSingle()
buộc nó phải quét phần còn lại của danh sách để tìm bản sao có thể xảy ra, nhưng đó là tôi. Nếu bạn cần thực thi tính duy nhất của mình tại thời điểm này, hãy sử dụngSingle()
gia đình, nếu không, hãy sử dụngFirst()
gia đình.