2017-01-02 92 views
1

使用比方說,我有一個員工列表GROUPBY Linq中

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

我不知道爲什麼,也沒有必要添加在LINQ結束了「選擇」。如果我想檢索員工的情況下,那麼就應該是:

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

回答

0

這兩個linq產生不同的結果。 第一個linq根據部門對結果進行分組,第二個直接獲取所有記錄。 例如,假設有5條記錄在表 記錄1 - DEP1 RECORD2 - DEP2 RECORD3 - DEP3 RECORD4 - DEP2 Record5 - DEP1

第一LINQ結果將是 DEP1 DEP2 DEP3 的組將顯示爲一個單一的記錄

第二LINQ結果將是 DEP1 DEP2 DEP3 DEP2 DEP1

基本上查詢應該以select或group子句結束。 希望它有幫助。

2

documentation講述:

group子句返回包含匹配的是零個或多個項目IGrouping <TKey, TElement>對象序列該組的關鍵價值。

編輯:

考慮看看Query Expression Basics到部分:

  • 結束查詢表達式

它指出:

查詢表達式必須以ei結尾一個select子句或一個group子句。

甲窺視Select clause documentation表明:

在查詢表達式,選擇子句指定在執行查詢時將產生的值的類型。 [...]查詢表達式必須以select子句或group子句結束。 [...]

使用組子句產生組的序列[...]

使用選擇子句產生的所有其它類型的序列[...]

看來,返回類型的規格是決定性的一點。由於group by子句指定了返回類型,因此不再需要進行額外的選擇,與where(如Tim Schmelter所述)相反。