我有一个数据表,我想使用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
你能帮忙吗?
答案 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
这给了我以下输出: -