考虑这段代码:
var query = db.Table
.Where(t => SomeCondition(t))
.AsEnumerable();
int recordCount = query.Count();
int totalSomeNumber = query.Sum();
decimal average = query.Average();
Assume query
需要很长时间才能运行。我需要获取记录总数SomeNumber
返回,最后取平均值。根据我的阅读,我认为.AsEnumerable()
将使用 LINQ-to-SQL 执行查询,然后使用 LINQ-to-ObjectsCount
, Sum
, and Average
。相反,当我在 LINQPad 中执行此操作时,我看到相同的查询运行了三次。如果我更换.AsEnumerable()
with .ToList()
,它只会被查询一次。
我是否遗漏了什么AsEnumerable
是/确实吗?
Calling AsEnumerable(
) 不执行查询,枚举则执行。
IQueryable
是允许的接口LINQ to SQL
来施展它的魔力。IQueryable
实施IEnumerable
所以当你打电话时AsEnumerable()
,您正在更改从那里调用的扩展方法,即从IQueryable
-方法IEnumerable
-方法(即从LINQ to SQL
to LINQ to Objects
在这种特殊情况下)。但你是not执行实际查询,只需更改how它将被完整执行。
要强制执行查询,您必须调用ToList()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)