1

我是 EF/Linq-To-SQL 的新手。我之前在 SO 上读到过,IQueryable 比 IEnumerable 更有利,因为它可以进行惰性求值。关于以下简单示例:

var records = db.Employees.Where(x => x.EmployeeID == "3" );

if (records.Any())
{
     var topRecord = records.First();
}

IQueryable 表达式是否被计算了两次?一次检查结果集中的任何元素,一次检索第一个元素?如果是这样,是否有更有效的方法来执行这种选择?

4

1 回答 1

4

是的,在这种情况下,查询将执行两次:首先是 for Any,然后是 for First

您可能可以FirstOrDefault改用:

var topRecord = db.Employees.FirstOrDefault(x => x.EmployeeID == "3" );
// topRecord will be null if there's no match

if (topRecord != null)
{
  ...
}
于 2013-03-20T14:54:49.003 回答