LINQ分组与计数问题

时间:2013-05-14 20:22:30

标签: asp.net vb.net linq

我在尝试使用计数正确分组LINQ查询时遇到问题。作为一个例子,我试图用以下数据查询数据表:

PC EC CC

ABC XXX US

ABC XXX CA

ABC XXX UK

DEF YYY US

DEF YYY CA

DEF YYY UK

DEF ZZZ US

DEF ZZZ CA

DEF ZZZ UK

HIJ AAA US

HIJ AAA CA

HIJ AAA UK

我想使用count函数显示每个PC值的不同EC值,删除CC中的值。换句话说,上述数据集的结果应为:

PC 计算EC

ABC 1

DEF 2

HIJ 1

我已经尝试了几种不同的方法来获得这个结果,但我一直在撞墙。我的最后一次尝试看起来像这样:

 Dim test = From r In ( _
                        From s In Base _
                        Group By s.Base_PC, _
                                 s.Base_EC _
                        Into g = Group) _
                        Group r By key = New With {r.Base_PC} _
                        Into Group _
                        Select key.Base_PC, Group.Count

我出错的任何想法?谢谢!

1 个答案:

答案 0 :(得分:2)

这里是方法语法,因为它对查询语法来说太多了:

Dim counts = base.AsEnumerable().
    GroupBy(Function(r) r.Field(Of String)("PC")).
    Select(Function(g) New With {
               .PC = g.Key,
               .CountEC = g.Select(Function(r) r.Field(Of String)("EC")).
                            Distinct().
                            Count()
           })

For Each x In counts
    Console.WriteLine("PC={0} Count of distinct EC's={1}", x.PC, x.CountEC)
Next

首先,您需要按“PC”列进行分组,然后选择一个匿名类型,其中包含组的键和“EC”列的不同值的计数。