【问题标题】:LinQ DataTable Group ByLinQ 数据表分组依据
【发布时间】:2016-02-02 01:12:08
【问题描述】:

我在 vb.net 应用程序中有一个数据表。数据表如下所示:

State Level City
AL     T     Arlton
AL     T     Brton
AL     T     Rurton
CO     T     Dver
CO     T     Crodo
WA     T     Blain
WA     T     Bwelham

我想对状态进行分组并循环 我尝试了以下但没有按预期工作。 请帮忙

到目前为止我尝试了什么:

Dim result = From r In dt Group r By state = r(0) Into Group Select Group
For Each r In result
    Console.WriteLine(r("State"))
Next

循环的输出应该是

AL
CO
WA

谢谢

【问题讨论】:

  • 按级别分组?那是你要的吗 ?您的预期输出看起来与 State/ 不同

标签: vb.net linq datatable


【解决方案1】:

您不能在数据表上调用 GroupBy。因此,您可以先使用AsEnumerable() 方法将数据表转换为集合,然后应用您的组

Dim itms = dt.AsEnumerable().[Select](Function(x) New With {
    Key .City = x.Field(Of String)("City"),
    Key .State = x.Field(Of String)("State"),
    Key .Level = x.Field(Of String)("Level")
})



Dim uniqueStatesgroupedStates = itms.GroupBy(Function(s) s.State, Function(p) p,
                                                                Function(k, v) New With {
    Key .State = k,
    Key .Item = v
})

' IF you want group records based in State

For Each r In uniqueStatesgroupedStates
    Console.WriteLine(r.State)
Next

' IF you want only Unique states from your data table
Dim uniqueStates = itms.[Select](Function(s) s.State).Distinct().ToList()

For Each r In uniqueStates
        Console.WriteLine(r)
Next

您的预期输出看起来只需要唯一的州名称,在这种情况下,您只需要对 State 属性执行 Select 并在其上调用 Distinct()

【讨论】:

【解决方案2】:

我猜你需要distinct 而不是group by,如果我正确理解你的问题,下面的方法对你有用。

Dim resultdt As DataTable = dt.DefaultView.ToTable(True, "state")

For Each row In newdt.Rows
    Console.WriteLine(row(0).ToString)
Next

DataView.ToTable Method ():根据现有DataView中的行创建并返回一个新的DataTable

【讨论】:

    猜你喜欢
    • 2015-10-30
    • 1970-01-01
    • 2010-11-16
    • 2014-12-09
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多