2013-07-03 65 views
15

我有,多組列計數的LINQ

名單,MyList,對象與領域:

string A; 
string B; 

概念上,這類似於在列A,B的兩列的SQL表

我試圖創建一個能夠產生這樣一個概念表中的三列的結果集這個T-SQL的LINQ表達式:

SELECT A, B, COUNT(B) 
FROM T1 
GROUP BY A, B 

也就是說,如果我有一個表,如:

A  B 
---------- 
x  g 
x  g 
x  g 
x  s 
y  g 
y  g 

我希望:

A  B  COUNT(B) 
------------------------- 
x  g   3 
x  s   1 
y  g   2 

我最好的努力是這樣的:

var result = from MyObjs in MyList 
group MyObjs by new { MyObjs.A, MyObjs.B } into g 
select new { g.Key.A, g.Key.B, g.Key.B.Count() } 

但伯爵出現返回B的總數,而不是每個多列組的B數。這怎麼解決?

+0

要注意的關鍵問題是,你是不是真的計數B,你只是在計數(例如在SQL'count(1)'中也會工作)。這就是爲什麼你的回答直觀地不起作用。 NinjaNye雖然看起來有固定的解決方案。 :) – Chris

回答

36

試試這個......(把我的頭頂部)

var result = from MyObjs in MyList 
group MyObjs by new { MyObjs.A, MyObjs.B } into g 
select new { g.Key.A, g.Key.B, MyCount = g.Count() } 

或者如果你喜歡...

var result = MyList.GroupBy(x => new {x.A, x.B}) 
        .Select(g => new {g.Key.A, g.Key.B, MyCount = g.Count()}); 
+2

原理是正確的,但語法在最後一行有點關閉。應該是'select new {A = g.Key.A,B = g.Key.B,Count = g.Count()}' –

+1

只有計算值(例如Count)必須被命名。命名A和B是可選的。 –