LINQ to Entities отодвигает всю таблицу - PullRequest
1 голос
/ 08 апреля 2010

В моем приложении я возвращаю пользовательский «фид». Он содержит все действия этого пользователя, события, запросы на добавление в друзья от других пользователей и т. Д. Когда я возвращаю канал, я вызываю различные функции для фильтрации запроса по пути.

        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 оценивает запросы?

1 Ответ

4 голосов
/ 08 апреля 2010

Если GetFeed возвращает IEnumerable, FilterByUser получит IEnumerable.Когда он вызывает некоторый оператор LINQ, т. Е. Где, он будет использовать IEnumerable Where, который начнет запрашивать информацию, которая в конечном итоге загрузит всю таблицу.Измените тип GetFeed на IQueryable, чтобы убедиться, что вместо него вызываются операторы LINQ IQueryable, что будет задерживать запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...