考虑 IEnumerable 扩展方法SingleOrDefault()和FirstOrDefault()
SingleOrDefault()
FirstOrDefault()
MSDN 文件表明SingleOrDefault:
SingleOrDefault
返回序列的唯一元素,如果序列为空,则返回默认值;如果序列中有多个元素,此方法将引发异常。
而FirstOrDefault来自 MSDN(大概是在使用OrderBy()或 OrderByDescending()根本不使用时),
FirstOrDefault
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?
题
*在决定使用 LINQ 查询时SingleOrDefault(), *您遵循或建议哪些约定?FirstOrDefault()
每当您使用SingleOrDefault时,您都清楚地声明该查询最多只能产生 一个 结果。另一方面,当FirstOrDefault使用时,查询可以返回任意数量的结果,但您声明您只想要第一个。
我个人发现语义非常不同,根据预期结果使用适当的语义可以提高可读性。