如何将linq中的groupBy转换为sql?

cho*_*bo2 4 c# linq linq-to-sql

我有这样的数据

id = 1<pk>
SDate = 12/12/2009
EDate = 12/12/2009
binding = a_1
userid = 14

id = 2<pk>
SDate = 12/12/2009
EDate = 12/12/2009
binding = a_1
userid = 14
Run Code Online (Sandbox Code Playgroud)

我想通过绑定来分组我的数据.我不知道该怎么做.我必须做一个新的选择吗?

到目前为止,我有这个

 Db.Table.Where(u => u.UserId == userId && u.Binding == binding)
                .GroupBy(u => u.Binding)
Run Code Online (Sandbox Code Playgroud)

所以我想返回所有列.我必须去吗

.select(group = new Table {....});
Run Code Online (Sandbox Code Playgroud)

Dav*_*kle 5

请记住,Linq的GroupBy与SQL的GroupBy不同.Linq的GroupBy返回一个.Key(这是你的组的条件是什么),然后是一个IEnumerable <>你正在分组的任何东西.因此,如果您希望计算每个绑定的所有行以及绑定本身,那么它将是:

 var bindingsAndCounts = 
     Db.Table.Where(u => u.UserId == userId && u.Binding == binding)
                .GroupBy(u => u.Binding)
                .Select(g => new {g.Key, BindingCount = g.Count()});
Run Code Online (Sandbox Code Playgroud)

这是一个构造比使用SQL更强大,因为你可以在表达式中使用"g"做任何事情.

如果要枚举每个组,可以省略select:

foreach (var group in whateveryourgroupingExpressionWas) {
   Console.WriteLine(group.Key);
   foreach (var row in group) {
      Console.WriteLine("ID: " + row.Id + "Name " + row.Name ...);
   }
}
Run Code Online (Sandbox Code Playgroud)