2012-12-21 54 views
2

如何使用兩個id的組;我有一個像如何將linq查詢分組爲兩個id的

empid: 1, usrid: 1, profid: 1 
empid: 1, usrid: 1, profid: 2 
empid: 2, usrid: 1, profid: 5 

我寫的查詢像

var query = (from i in data 
     group i by new { i.empid, i.usrid} into g 
     select new {       
     profileid = g.Select(z=>z.profileid).ToArray()       
     }).ToArray(); 

現在的empid:1usrid:1我想配置文件ID爲1,2 陣列數據和empid:2usrid:1我想prof id as 5

但是我得到了每個記錄中的所有三個值,如1,2,5

我怎樣才能像使用LINQ

+5

http://stackoverflow.com/questions/847066/group-by-multiple-columns –

+0

它必須在您的數據中。你展示的內容沒有錯。也許你可以顯示一個完整的運行代碼片段,顯示意外的行爲。 –

+0

@MitchWheat Q&A顯示如何按多列進行分組,但這不是問題。 –

回答

0

我覺得它更容易看到什麼是我做的步驟要去。

第一組數據

var grouped = data.GroupBy(d => new { d.empid, d.userid }); 

然後選擇結果

var results = grouped.Select(g => g.Select(d => d.profid).ToArray()); 

每個g是由一對empiduserid鍵控的基團。該組是您的課程實例的集合。因此,上面的聲明表示要從每個組(每個empiduserid對)中排列一組profid。結果證明是

[1, 2] 
[5] 

這會讓你得到你想要的數組,但是你失去了這些鍵。我不知道你想對結果做什麼,所以可能會好起來,但可能不會。無論哪種方式,組確實包含您想要的鍵和值。

解決此問題的另一種方法是使用不同的過載GroupBy來獲得profid作爲值。

var grouped2 = data.GroupBy(d => new { d.empid, d.userid }, d => d.profid); 

這會給你一組的關鍵是一對empiduserid和收集,這正好是profid秒。這更可能更接近你想要的。