我想使用LINQ查询两个DataTables
(通过解析Excel文件填充),并将它们连接到匹配字段"UPC"上,如下所示:
Dim query = From c In dt.AsEnumerable() _
Join r In dtUnits.AsEnumerable() _
On c.Field(Of String)("UPC") Equals r.Field(Of String)("UPC") _
Select New With {.UPC = r.Field(Of String)("UPC")}
另外,我想复制这个LINQ查询结果到一个数据表。我找到了一个方法CopyToDataTable()
,但它是在。net 4.5中,而我们的服务器只支持。net 3.5。
如何在vb.net 3.5中模拟此功能?
谢谢!
自。net 35以来,CopyToDataTable
已经存在。但问题是,您希望从匿名类型"从头"创建DataTable
。这行不通。
CopyToDataTable
是IEnumerable<DataRow>
的扩展。所以你要么选择一个 DataRow
从你的DataTables
:
Dim query = From c In dt.AsEnumerable() _
Join r In dtUnits.AsEnumerable() _
On c.Field(Of String)("UPC") Equals r.Field(Of String)("UPC") _
Select c
Dim table = query.CopyToDataTable()
或者使用使用反射的ObjectShredder
,因此不是最有效的方法(c#实现)。
看看这篇文章:
http://codecorner.galanter.net/2009/12/17/grouping-ado-net-datatable-using-linq/你可以使用.toDataTable
方法,但只有当你的LINQ查询返回实际的数据表行。对于自定义类型,您可以使用附加到文章代码来执行相同的操作。
请阅读这篇文章LINQ TO DATATABLE in WCF,连接到冒险数据库
Datasets不实现IEnumerable/IQueryable接口。
所以请阅读这篇文章。
http://www.wnewsone.com/tutorials/wcf/ShowArticle.aspx?articleid=20143