2013-07-03 18 views
15

Ben,Çok Grubu Kolon alanları ile nesnelerin Linq

listesi, MyList Kont:

string A; 
string B; 

Kavramsal olarak, bu sütunlarda A, B. sahip iki sütunlu bir SQL Tablo benzer

böyle kavramsal masaya bu T-SQL üç sütun sonuç kümesini üretecektir bir linq ifade oluşturmak çalışıyorum:

SELECT A, B, COUNT(B) 
FROM T1 
GROUP BY A, B 
Böyle bir tablo olsaydı

kendisine,:

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

ben beklenebilir:

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

En iyi çabaları bu idi:

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() } 

Ancak sayı görünüyor Birden fazla sütun grubu için B'nin toplam sayısını değil B'nin toplam sayısını döndürün. Bu nasıl düzeltilebilir? İsterseniz

+0

nota anahtarı şey, gerçekten olmaması ... (başımın üstü kapalı) ....

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() } 

bu deneyin Ya B saymak, sadece sayıyorsunuz (örn. SQL 'sayısında (1)' de aynı şekilde çalışacaktır). Bu yüzden cevabınız sezgisel olarak çalışmıyor. NinjaNye, göründüğü halde çivilenmiş bir çözüme sahip. :) – Chris

cevap

36

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

Prensip doğru ama sözdizimi son satırda biraz kapalı. Yeni seçilmelidir {A = g.Key.A, B = g.Key.B, Count = g.Count()} ' –

+1

Sadece hesaplanan değerler (örneğin, Count) adlandırılmalıdır. A ve B'yi adlandırmak isteğe bağlıdır. –