Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net LinQ数据表分组依据_Vb.net_Linq_Datatable - Fatal编程技术网

Vb.net LinQ数据表分组依据

Vb.net LinQ数据表分组依据,vb.net,linq,datatable,Vb.net,Linq,Datatable,我在vb.net应用程序中有一个datatable。数据表如下所示: 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 =

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

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

谢谢

您不能在数据表上调用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

您的预期输出看起来只需要唯一的状态名,在这种情况下,您只需在状态属性上执行Select,然后在此属性上调用
Distinct()

您不能在数据表上调用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

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

我想您需要
Distinct
而不是
group by
,如果我正确理解了您的问题,以下方法将适用于您

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

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

:基于现有数据视图中的行创建并返回新数据表

如果我正确理解了您的问题,我想您需要
distinct
而不是
group by
,以下方法适用于您

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

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

:基于现有数据视图中的行创建并返回新数据表

按级别分组?这就是你想要的吗?您的预期输出看起来与状态/组的级别不同?这就是你想要的吗?您的预期输出看起来与状态不同/您根本不需要在示例中调用
.ToList()
。@Fabio:是的。添加了它,以便我们可以通过VS断点查看结果以查看数据。现在删除它:)现在可以调试lambdas了:太棒了!谢谢分享链接。您根本不需要在示例中调用
.ToList()
。@Fabio:是的。添加了它,以便我们可以通过VS断点查看结果以查看数据。现在删除它:)现在可以调试lambdas了:太棒了!谢谢分享链接。