我是EF / Linq-To-SQL的新手。我之前读到的是,IQueryable比IEnumerable更有益,因为它做了懒惰的评估。关于以下简单示例:
var records = db.Employees.Where(x => x.EmployeeID == "3" );
if (records.Any())
{
var topRecord = records.First();
}
IQueryable表达式被评估两次吗?一次检查结果集中的任何元素,一次检查第一个元素?如果是这样,是否有更有效的方式来执行这样的选择?
答案 0 :(得分:4)
是的,在这种情况下,查询将执行两次:首先是Any
,然后是First
。
您可以改为使用FirstOrDefault
:
var topRecord = db.Employees.FirstOrDefault(x => x.EmployeeID == "3" );
// topRecord will be null if there's no match
if (topRecord != null)
{
...
}