groupby在Linq使用

时间:2017-01-02 12:20:20

标签: c# linq

假设我有员工名单

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

我不知道为什么不需要在linq的末尾添加“Select”。如果我想检索员工实例,那么它应该是:

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

2 个答案:

答案 0 :(得分:2)

documentation告诉:

  

group子句返回一组IGrouping <TKey, TElement>对象,这些对象包含与该组的键值匹配的零个或多个项目。

编辑:

查看Query Expression Basics部分:

  • 结束查询表达

它声明:

  

查询表达式必须以select子句或group子句结束。

查看Select clause documentation会发现:

  

在查询表达式中,select子句指定执行查询时将生成的值的类型。 [...]查询表达式必须以select子句或group子句终止。 [...]

     

使用group子句生成一系列组[...]

     

使用select子句生成所有其他类型的序列[...]

似乎返回类型的规范是决定性的一点。由于group by子句指定了返回类型,因此不再需要进行额外选择,与where相反(如Tim Schmelter所述)。

答案 1 :(得分:0)

linq都会产生不同的结果。 第一个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子句结束。 希望它有所帮助。

相关问题