如何在linq to sql中使用groupBy?

4
我有如下数据
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

我希望按绑定对我的数据进行分组。不过我不确定该如何操作。我需要创建一个新的选择器来实现吗?

目前我的代码是这样的:

 Db.Table.Where(u => u.UserId == userId && u.Binding == binding)
                .GroupBy(u => u.Binding)

所以我想返回所有列。我需要去哪里吗?

.select(group = new Table {....});
1个回答

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

这种构造比SQL更加强大,因为你可以在表达式中使用"g"来完成几乎任何操作。

如果你想枚举每个分组,可以省略选择:

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

哦,我不知道。但在您的情况下,您不使用groupBy,而是使用select。 - chobo2
这是在.GroupBy().Select()之后的操作。 - Alexander Taran
那么我使用目前为止的分组,然后添加一个类似于上面的选择吗? - chobo2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接