考虑IEnumerable扩展方法SingleOrDefault()
和FirstOrDefault()
返回序列的唯一元素;如果序列为空,则返回默认值;否则,返回默认值。如果序列中有多个元素,则此方法将引发异常。
而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查询中使用或遵循哪些约定?