Рассмотрим этот код:
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, затем используйте LINQ-to-Objects для Count
, Sum
и Average
. Вместо этого, когда я это делаю в LINQPad, я вижу, что один и тот же запрос запускается три раза. Если я заменю .AsEnumerable()
на .ToList()
, он будет запрашиваться только один раз.
Мне не хватает чего-то о том, что AsEnumerable
есть/делает?