Kei*_*ows 10 .net c# entity-framework
要获得记录列表,我通常会做以下事情:
var efCompany = from a in _dbRiv.Company where a.CompanyId == companyFeedInfo.CompanyId select a;
Run Code Online (Sandbox Code Playgroud)
要获得单个记录,当我知道我使用PK来检索它时,我使用类似的东西:
var efCompany = (from a in _dbRiv.Company where a.CompanyId == companyFeedInfo.CompanyId select a).First();
Run Code Online (Sandbox Code Playgroud)
现在,使用单记录方法,如果PK是一个错误的值(就像它有目的地在测试中),第二行会抛出一个错误.
获得单个记录并处理它的最佳实践方法是什么?
Jon*_*eet 22
使用SingleOrDefault
,如果你希望为0或1,或者FirstOrDefault
如果你只需要在第一个记录了许多潜在的,但可以用0应付都将返回默认值的类型(通常为空),如果没有结果.
顺便说一下,这样的查询通常更具可读性(IMO)而不使用查询表达式,所以你可能会有类似的东西:
var efCompany = _dbRiv.Company
.Where(a => a.CompanyId == companyFeedInfo.CompanyId)
.SingleOrDefault();
if (efCompany != null)
{
// Use it
}
else
{
// Report to user, or whatever
}
Run Code Online (Sandbox Code Playgroud)
当您使用多个运算符或执行相对复杂的事情(如连接)时,查询表达式很棒 - 但如果您刚刚获得了一个where
条款或只是进行了投影,那么这个"点符号"就更简单了.当你需要调用最后的方法时,它也会更好FirstOrDefault
.
请注意这两个SingleOrDefault()
和 FirstOrDefault()
不会允许你指定的默认值.
有DefaultIfEmpty()
,如果枚举中没有项目,则允许您指定要返回的默认值.您可以将此一个与First()
(如在DefaultIfEmpty().First()
)结合以实现FirstOrDefault()
类似行为,并将lambda包装为创建新实例并将其添加到集合中.
如果您只需要检查是否存在记录,也可以使用Any()
.但是,如果您需要处理记录(如果存在),则会导致两个查询.
归档时间: |
|
查看次数: |
22040 次 |
最近记录: |