假设我有员工名单
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;
答案 0 :(得分:2)
group子句返回一组IGrouping
<TKey, TElement>
对象,这些对象包含与该组的键值匹配的零个或多个项目。
编辑:
它声明:
查询表达式必须以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子句结束。 希望它有所帮助。