如何解决LINQ Single vs First
如果您期望一条记录,那么在您的代码中明确说明总是好的。
我知道其他人已经写过你为什么使用其中一个,但我想我会说明为什么你不应该使用一个,当你 的是另一个时。
注意:在我的代码中,我通常会使用FirstOrDefault()
andSingleOrDefault()
但这是一个不同的问题。
Customers
以使用复合键 ( ID
, ) 以不同语言存储的表为例Lang
:
DBContext db = new DBContext();
Customer customer = db.Customers.Where( c=> c.ID == 5 ).First();
上面的代码引入了一个可能的逻辑错误(难以追踪)。它将返回多条记录(假设您有多种语言的客户记录),但它总是只返回第一个……这有时可能会起作用……但其他人则不行。这是不可预测的。
由于您的意图是返回 Single Customer
use 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();
它将返回一个对象,并且由于您正在使用排序,它将是返回的最新记录。
Single()
在您认为应该明确始终返回 1 条记录时使用将帮助您避免逻辑错误。
解决方法
当我确定查询将返回 单个记录*Single()
时,使用运算符是否更有效?First()
*
有区别吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。