Чтобы эффективно подсчитать количество записей, фреймворк должен оценить запрос, таким образом ударив по базе данных.Однако, поскольку запрос мог измениться между Count () и ToList (), он должен выполнить оценку снова.Примите во внимание следующее:
var myIQueryable = my.db<SomeModel>(); // IQueryable<SomeModel>
var countQuery = myIQueryable.Count(); // 10
MakeAdditions(myIQueryable, 10); // adds 10 items
var list = myIQueryable.ToList(); // List<SomeModel> count=20
MakeAdditions(myIQueryable, 10);
var countList = list.Count(); // still 20, List never changed
Другими словами, все вызовы IQueryable по-прежнему подчиняются тому, как он выполняет свои запросы.После записи запроса в список вы имеете дело исключительно со своим списком в памяти, независимо от изменений, которые происходят с источником данных IQueryable.