Entity Framework - Где пункт - PullRequest
4 голосов
/ 18 ноября 2011

Допустим, у меня есть таблица с именем User.Когда я использую Entity Framework для получения записей, я делаю так:

var db = new Context();
var users = db.Users;

Возвращает всех пользователей в моей таблице.ХОРОШО.Если я сделаю это:

var fooUsers = db.Users.Where(u => u.Name == 'foo');

Это даст мне всех пользователей с именем 'foo'.ХОРОШО.Мой вопрос: платформа сущностей делает запрос вроде:

select * from user where name = 'foo'

Или он загружает всех пользователей и фильтрует их на сервере с помощью лямбда-выражения?

Ответы [ 3 ]

12 голосов
/ 18 ноября 2011

Sql, представленный в вашу базу данных, будет содержать ваше предложение where. Вы можете использовать SQL Server Profiler для наблюдения за тем, как запросы отправляются в вашу БД.

2 голосов
/ 18 ноября 2011

Отсюда http://msdn.microsoft.com/en-us/library/cc853327.aspx

При создании запроса ObjectQuery или LINQ запрос может быть выполнен не сразу.Выполнение запроса откладывается до тех пор, пока не потребуются результаты, например, во время перечисления foreach (C #) или For Each (Visual Basic), или когда он назначен для заполнения коллекции List.Выполнение запроса начинается немедленно, когда вы вызываете метод Execute для ObjectQuery или когда вы вызываете метод LINQ, который возвращает одноэлементный запрос, например First или Any.Для получения дополнительной информации см. Объектные запросы и Выполнение запросов (LINQ to Entities).

Поэтому, когда у вашего запроса есть предложение WHERE, он просто загрузит результаты, отфильтрованные базой данных, с помощью where.

2 голосов
/ 18 ноября 2011

Entity Framework переведет такой запрос в «выражение магазина».То есть он сгенерирует запрос к базе данных - при условии, что ваше хранилище данных - базы данных - это будет несколько похоже на запрос, который вы включили в свой вопрос.Впрочем, он вполне может назвать столбцы, и, скорее всего, будут некоторые другие различия.

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