Hãy xem xét các phương thức mở rộng IEnumerable SingleOrDefault()
vàFirstOrDefault()
Tài liệu MSDNSingleOrDefault
:
Trả về phần tử duy nhất của chuỗi hoặc giá trị mặc định nếu chuỗi trống; phương thức này đưa ra một ngoại lệ nếu có nhiều hơn một phần tử trong chuỗi.
trong khi FirstOrDefault
từ MSDN (có lẽ khi sử dụng một OrderBy()
hoặc OrderByDescending()
hoặc không có gì cả),
Trả về phần tử đầu tiên của chuỗi
Hãy xem xét một số ít các truy vấn mẫu, không phải lúc nào cũng rõ ràng khi sử dụng hai phương thức này:
var someCust = db.Customers
.SingleOrDefault(c=>c.ID == 5); //unlikely(?) to be more than one, but technically COULD BE
var bobbyCust = db.Customers
.FirstOrDefault(c=>c.FirstName == "Bobby"); //clearly could be one or many, so use First?
var latestCust = db.Customers
.OrderByDescending(x=> x.CreatedOn)
.FirstOrDefault();//Single or First, or does it matter?
Câu hỏi
Những quy ước nào bạn tuân theo hoặc đề xuất khi quyết định sử dụng SingleOrDefault()
và FirstOrDefault()
trong các truy vấn LINQ của bạn?