如何在linq中分组到sql?

时间:2009-12-31 23:02:44

标签: 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

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

到目前为止,我有这个

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

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

.select(group = new Table {....});

1 个答案:

答案 0 :(得分:5)

请记住,Linq的GroupBy与SQL的GroupBy不同。 Linq的GroupBy返回一个.Key(这是你的组的条件是什么),然后是一个IEnumerable&lt;&gt;无论你在分组什么。因此,如果您希望计算每个绑定的所有行以及绑定本身,那么它将是:

 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”做任何事情。

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

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