下面是我的 LINQ 查询:
Dim JoinedResult = From t1 In temp.AsEnumerable() _
Group Join t2 In tbCity.AsEnumerable() _
On t1.Field(Of String)("City") Equals t2.Field(Of String)("city_name") _
Into RightTableResults = Group _
From t In RightTableResults.DefaultIfEmpty
Select New With
{
.ID = t1.Item("ID"),
.CID = If(t Is Nothing,
1,
t.Item("city_gid"))
}
如何将值从“JoinedResult”复制到数据表?
注意:
JoinedResult.CopyToDataTable()
最佳答案
CopyToDataTable
自 .NET 3.5 以来已经存在。但问题是你想创建一个 DataTable
“从头开始”来自匿名类型。那行不通。CopyToDataTable
是 IEnumerable<DataRow>
的扩展只有。所以你要么选择一 DataRow
来自您的加入 DataTables
:
Dim query = From t1 In temp.AsEnumerable() _
Group Join t2 In tbCity.AsEnumerable() _
On t1.Field(Of String)("City") Equals t2.Field(Of String)("city_name") Into RightTableResults = Group
From t In RightTableResults.DefaultIfEmpty
Select t1
Dim table = query.CopyToDataTable()
或使用 this
ObjectShredder
它使用反射,因此不是最有效的方式( C# implementation )。除此之外,你为什么需要
DataTable
根本?您还可以使用匿名类型作为 DataSource 或创建一个自定义类,您可以从查询结果中对其进行初始化。编辑 : 您也可以创建自定义
DataTable
使用您需要的列,例如(来自您的评论):Dim tbTemp As New DataTable
tbTemp.Columns.Add("ID")
tbTemp.Columns.Add("CID")
Dim query = From t1 In temp.AsEnumerable()
Group Join t2 In tbCity.AsEnumerable() On
t1.Field(Of String)("City") Equals t2.Field(Of String)("city_name")
Into RightTableResults = Group
From t In RightTableResults.DefaultIfEmpty
Select New With {.ID = t1.Item("ID"), .City_Gid = t.Item("city_gid")}
For Each x In query
tbTemp.Rows.Add(x.ID, x.City_Gid)
Next
关于.net - 无法将 LINQ 结果复制到数据表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14578235/