首页 > 解决方案 > vb.net datatable asenumerble 获取不同的 vlues 并计算分组的重复行

问题描述

我有一个名为 dtDealer 的数据表,其中有 2 列名为 Customer,Year。我正在尝试创建一个名为 dtdistinct 的新数据表,其中有一个名为 multi 的额外列,它显示重复行数的计数......

dt经销商

客户 | 年


AAA 2012

BBB 2011

AAA 2012

BBB 2011

BBB 2011

BBB 2012

dtmulti

客户 | 年份 | 多


AAA 2012 2

BBB 2011 3

BBB 2012 1

尝试了asenumerable但无法正常工作请帮助

标签: vb.netlinqasenumerable

解决方案


AsEnumerable 确实有效。我怀疑你在分组时遇到了问题。我按元组分组

Dim dealers = {(Customer:= "AAA", Year:= 2012),
               (Customer:= "BBB", Year:= 2011),
               (Customer:= "AAA", Year:= 2012),
               (Customer:= "BBB", Year:= 2011),
               (Customer:= "BBB", Year:= 2011),
               (Customer:= "BBB", Year:= 2012)}
Dim dtDealer As New DataTable()
dtDealer.Columns.Add("Customer")
dtDealer.Columns.Add("Year")
For Each dealer In dealers
    Dim row = dtDealer.NewRow()
    row("Customer") = dealer.Customer
    row("Year") = dealer.Year
    dtDealer.Rows.Add(row)
Next

Console.WriteLine($"Customer | Year")
For Each row In dtDealer.AsEnumerable
    Console.WriteLine($"{row("Customer")}{vbTab}{row("Year")}")
Next

Dim dtMulti As New DataTable()
dtMulti.Columns.Add("Customer")
dtMulti.Columns.Add("Year")
dtMulti.Columns.Add("Multi")

dtMulti = dtDealer.AsEnumerable().
          GroupBy(Function(dealer) (dealer("Customer"), dealer("Year"))).
          Select(Function(g)
                     Dim newRow = dtMulti.NewRow()
                     newRow("Customer") = g.First.Item("Customer")
                     newRow("Year") = g.First.Item("Year")
                     newRow("Multi") = g.Count()
                     Return newRow
                 End Function).
          CopyToDataTable()

Console.WriteLine($"Customer | Year | Multi")
For Each row In dtMulti.AsEnumerable
    Console.WriteLine($"{row("Customer")}{vbTab}{row("Year")}{vbTab}{row("Multi")}")
Next

客户 | 年份
AAA 2012
BBB 2011
AAA 2012
BBB 2011
BBB 2011
BBB 2012
客户 | 年份 | 多
AAA 2012 2
BBB 2011 3
BBB 2012 1


推荐阅读