IQueryable评估

时间:2013-03-20 14:51:18

标签: .net entity-framework linq-to-sql lazy-evaluation

我是EF / Linq-To-SQL的新手。我之前读到的是,IQueryable比IEnumerable更有益,因为它做了懒惰的评估。关于以下简单示例:

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

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

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

1 个答案:

答案 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)
{
  ...
}