小编典典

LINQ:何时使用 SingleOrDefault 与 FirstOrDefault() 与过滤条件

all

考虑 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?

*在决定使用 LINQ 查询时SingleOrDefault()*您遵循或建议哪些约定?FirstOrDefault()


阅读 91

收藏
2022-03-08

共1个答案

小编典典

每当您使用SingleOrDefault时,您都清楚地声明该查询最多只能产生 一个
结果。另一方面,当FirstOrDefault使用时,查询可以返回任意数量的结果,但您声明您只想要第一个。

我个人发现语义非常不同,根据预期结果使用适当的语义可以提高可读性。

2022-03-08