Linq集团由一个领域和另一个统计

时间:2015-05-06 14:05:24

标签: vb.net linq

我有一个数据表,我想使用LINQ来获得等效的

Select barid, count(distinct bar) as barCount
From myTable
Group By barid

数据格式为:

barid bar
4     1
4     1
4     1
12    2
12    2
12    2
12    3
13    1
13    2
13    3

结果应为:

barid, barCount
4      1
12     2
13     3

你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

我无法将其翻译成vb.net,但c#等价物将是:

var result = from record in data 
             group record by record.barid into grp
             select new
             {
                barid = grp.Key,
                barCount = grp.Select( item => item.bar ).Distinct( ).Count( )
             };

答案 1 :(得分:0)

考虑到您的DataTable列属于Integer类型,您可以使用以下查询: -

Dim result = dt.AsEnumerable().GroupBy(Function(x) x.Field(Of Integer)("barid")) _
               .[Select](Function(x) New With { _
                   Key .barid = x.Key, _
                   Key .barCount = x.[Select](Function(z) z.Field(Of Integer)("bar")) _
                                    .Distinct().Count()})

然后你可以像这样使用ForEach: -

For Each x In result
      Console.WriteLine("barid {0}",x.barid)
      Console.WriteLine("barCount {0}", x.barCount)
      Console.WriteLine("---------------")
Next

这给了我以下输出: -

enter image description here