多组列计数Linq

时间:2013-07-03 14:18:59

标签: sql linq

我有,

包含字段的对象列表MyList

string A;
string B;

从概念上讲,这类似于带有列A,B的两列SQL表。

我正在尝试创建一个linq表达式,它将在这样一个概念表上生成此T-SQL的三列结果集:

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的数量。如何解决这个问题?

1 个答案:

答案 0 :(得分:42)

试试这个......(脱离我的头顶)

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