Рассмотрим этот код:
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 есть/делает?