2017-01-02 2 views
1

Допустим, у меня есть список сотрудниковGroupBy использовать в Linq

var employeeGroup = from emp in Employee.GetAllEmployees() 
           group emp by emp.Department; 
           //why no need to use "select" here 

Я не знаю, почему нет никакой необходимости, чтобы добавить «Select» в конце LINQ. Если я хочу, чтобы получить экземпляры сотрудника, то он должен быть:

var employeeGroup = from emp in Employee.GetAllEmployees() 
        select emp; 

ответ

0

И linq дает разные результаты. Первый linq группирует результаты на основе отдела, а второй выбирает все записи напрямую. Например, говорят, что есть 5 записей в таблице Record1 - dep1 Record2 - DEP2 Record3 - dep3 Record4 - DEP2 Record5 - dep1

Первый результат LINQ будет dep1 DEP2 dep3 группа будет отображаться в виде одной записи

Второй результат LINQ будет dep1 DEP2 dep3 DEP2 dep1

В основном запрос должен заканчиваться предложением select или group. Надеюсь, это поможет.

2

documentation говорит:

Оговорка группа возвращает последовательность IGrouping <TKey, TElement> объектов, которые содержат ноль или более элементов, которые соответствуют ключевое значение для группы.

EDIT:

Взглянув на Query Expression Basics в разделе:

  • Окончание выражения запроса

говорится, что:

запросе выражение должно заканчиваться ei это предложение select или классовое предложение.

Взгляд в Select clause documentation показывает, что:

В выражении запроса, выберите пункт определяет тип значений, которые будут производиться при выполнении запроса. [...] Выражение запроса должно заканчиваться либо предложением select, либо предложением группы. [...]

Используйте предложение группы для получения последовательности групп [...]

Используйте выберите пункт, чтобы производить все другие типы последовательностей [...]

Кажется, что спецификация типа возврата является решающей. Поскольку предложение group by указывает тип возврата, больше не нужно делать дополнительный выбор, в отличие от where (как уже упоминал Тим Шмельтер).