В моем приложении я возвращаю пользовательский «фид». Он содержит все действия этого пользователя, события, запросы на добавление в друзья от других пользователей и т. Д. Когда я возвращаю канал, я вызываю различные функции для фильтрации запроса по пути.
var userFeed = GetFeed(db); // Query to pull back all data
userFeed = FilterByUser(userFeed, user, db); // Filter for the user
userFeed = SortFeed(userFeed, page, sortBy, typeName); // Sort it
Возвращаемые данные - это именно то, что мне нужно, однако, когда я смотрю на трассировку профиля SQL, я вижу, что запрос, который получает эти данные, не фильтрует их на уровне базы данных, а вместо этого выбирает ВСЕ данные в стол (ы).
Этот запрос не будет выполнен, пока я не переберу результаты по моему мнению. Все эти функции возвращают объект IEnumerable.
У меня сложилось впечатление, что LINQ возьмет все мои фильтры и сформирует один запрос, чтобы получить данные, которые мне нужны, вместо того, чтобы извлекать все данные и затем фильтровать их на сервере.
Что я делаю не так или что я не понимаю в том, как LINQ оценивает запросы?