考虑以下代码:
var query = db.Table
.Where(t => SomeCondition(t))
.AsEnumerable();
int recordCount = query.Count();
int totalSomeNumber = query.Sum();
decimal average = query.Average();
假设
query
运行时间非常长。我需要获取记录计数、返回的总 SomeNumber
数量,并在最后求取平均值。根据我的阅读,我认为 .AsEnumerable()
将使用 LINQ-to-SQL 执行查询,然后对 Count
、Sum
和 Average
使用 LINQ-to-Objects 。然而,在 LINQPad 中执行时,我发现相同的查询被运行了三次。如果我将 .AsEnumerable()
替换为 .ToList()
,则只查询一次。我是否错过了关于
AsEnumerable
的某些内容/操作?
AsEnumerable()
行为的一个非常有用的问题。 - LCJ