gpt4 book ai didi

.net - LINQ Single 与 First

转载 作者:行者123 更新时间:2023-12-03 04:10:11 26 4
gpt4 key购买 nike

LINQ:

当我确定查询将返回单个记录<时,使用 Single() 运算符比 First() 是否更有效/强>?

有什么区别吗?

最佳答案

如果您期望单个记录,那么在代码中明确说明总是好的。

我知道其他人已经写过为什么要使用其中之一,但我想我会说明为什么当您指的是另一个时不应该使用其中一个。

注意:在我的代码中,我通常会使用 FirstOrDefault()SingleOrDefault() 但这是一个不同的问题。

以使用组合键(IDLang)以不同语言存储客户的表为例:

DBContext db = new DBContext();
Customer customer = db.Customers.Where( c=> c.ID == 5 ).First();

上面的代码引入了一个可能的逻辑错误(难以追踪)。它将返回多个记录(假设您有多种语言的客户记录),但它总是只返回第一个记录...有时可能有效...但其他记录则无效。这是不可预测的。

由于您的目的是返回单个客户,请使用Single();

以下内容将引发异常(在本例中正是您想要的):

DBContext db = new DBContext();
Customer customer = db.Customers.Where( c=> c.ID == 5 ).Single();

然后,你只需拍打自己的额头并对自己说……哎呀!我忘记了语言字段!以下是正确的版本:

DBContext db = new DBContext();
Customer customer = db.Customers.Where( c=> c.ID == 5 && c.Lang == "en" ).Single();

First() 在以下场景中很有用:

DBContext db = new DBContext();
NewsItem newsitem = db.NewsItems.OrderByDescending( n => n.AddedDate ).First();

它将返回一个对象,并且由于您正在使用排序,因此它将是返回的最新记录。

当您认为应该明确地始终返回 1 条记录时,使用 Single() 将帮助您避免逻辑错误。

关于.net - LINQ Single 与 First,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2724096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com