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