我在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
谢谢
答案 0 :(得分:2)
您无法在数据表上调用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
您的预期输出看起来只需要唯一的州名称。在这种情况下,您只需要选择一个州选择属性并在其上调用Distinct()
。
答案 1 :(得分:1)
我想你需要group by
而不是Dim resultdt As DataTable = dt.DefaultView.ToTable(True, "state")
For Each row In newdt.Rows
Console.WriteLine(row(0).ToString)
Next
,如果我理解你的问题,那么跟随方法将适合你。
$this->db->query('YOUR QUERY HERE');
DataView.ToTable Method ():根据现有DataView中的行创建并返回一个新的DataTable