多组列计数Linq

use*_*753 16 sql linq

我有,

MyList包含字段的对象的列表:

string A;
string B;
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT A, B, COUNT(B) 
FROM T1
GROUP BY A, B
Run Code Online (Sandbox Code Playgroud)

也就是说,如果我有一个表,如:

A       B
----------
x       g
x       g
x       g
x       s
y       g
y       g
Run Code Online (Sandbox Code Playgroud)

我希望:

A       B       COUNT(B)
-------------------------
x       g         3
x       s         1
y       g         2
Run Code Online (Sandbox Code Playgroud)

我最大的努力是这样的:

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() }
Run Code Online (Sandbox Code Playgroud)

但是计数似乎返回B的总数而不是每个多列组的B的数量.怎么解决这个问题?

Nin*_*Nye 43

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

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() }
Run Code Online (Sandbox Code Playgroud)

或者如果您愿意......

var result = MyList.GroupBy(x => new {x.A, x.B})
                   .Select(g => new {g.Key.A, g.Key.B, MyCount = g.Count()});
Run Code Online (Sandbox Code Playgroud)

  • 原则是正确的,但语法在最后一行有点偏离.应该是`select new {A = g.Key.A,B = g.Key.B,Count = g.Count()}` (2认同)
  • 只有计算值(例如计数)必须被命名。命名 A 和 B 是可选的。 (2认同)