Разница между выбором и местом в Entity Framework - PullRequest
44 голосов
/ 22 ноября 2011

В чем разница между .Select() и .Where() в Entity Framework?Например,

return ContextSet().Select(x=> x.FirstName == "John")

против

ContextSet().Where(x=> x.FirstName == "John")

Когда я должен использовать .Select против .Where?

Ответы [ 2 ]

73 голосов
/ 22 ноября 2011

Select - это проекция, поэтому вы получите выражение x=> x.FirstName == "John", вычисленное для каждого элемента в ContextSet() на сервере. то есть много значений true / false (тот же номер, что и в исходном списке). Если вы посмотрите, выбор вернет что-то вроде IEnumerable<bool> (потому что тип x=> x.FirstName == "John" - это bool).

Where фильтрует результаты, возвращая перечисляемое значение исходного типа (без проекции).


Итак, используйте Select, если вы хотите сохранить все результаты, но изменить их тип (спроецировать их).

Используйте Where, если вы хотите отфильтровать результаты, сохраняя исходный тип

20 голосов
/ 22 ноября 2011

Where() - это фильтр.

Select() выбирает другой фрагмент данных.
Ваш пример Select() вернет коллекцию логических значений.

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