พิจารณาวิธีการขยาย IEnumerable SingleOrDefault()
และFirstOrDefault()
เอกสาร MSDN ที่SingleOrDefault
:
ส่งคืนองค์ประกอบเดียวของลำดับหรือค่าเริ่มต้นหากลำดับว่างเปล่า วิธีการนี้จะยกเว้นถ้ามีมากกว่าหนึ่งองค์ประกอบในลำดับ
ขณะที่FirstOrDefault
จาก MSDN (สมมุติเมื่อใช้OrderBy()
หรือ OrderByDescending()
หรือไม่มีเลย)
ส่งคืนองค์ประกอบแรกของลำดับ
พิจารณาตัวอย่างแบบสอบถามจำนวนหนึ่งซึ่งไม่ชัดเจนว่าจะให้ใช้สองวิธีนี้เมื่อใด:
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?
คำถาม
คุณทำตามอนุสัญญาอะไรบ้างหรือแนะนำเมื่อตัดสินใจใช้SingleOrDefault()
และFirstOrDefault()
ในการสืบค้น LINQ ของคุณ