0

我想DataTables使用 LINQ 查询两个(通过解析 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 查询结果复制到 DataTable。我找到了一个方法 CopyToDataTable(),但它是在 .NET 4.5 中的,而我们的服务器只支持 .NET 3.5。

如何在 VB .NET 3.5 中模拟此功能?

谢谢!

4

3 回答 3

3

CopyToDataTable自 .NET 35 以来就已经存在。但问题是您想DataTable从匿名类型“从头开始”创建。那是行不通的。

CopyToDataTable只是一个扩展IEnumerable<DataRow>。因此,您要么必须从已加入的选项中选择一个DataRowDataTables

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# 实现)。

于 2012-12-21T14:24:25.873 回答
1

看看这篇文章:

http://codecorner.galanter.net/2009/12/17/grouping-ado-net-datatable-using-linq/

您可以使用.toDataTable方法,但前提是您的 LINQ 查询返回实际的 DataTable 行。对于自定义类型,您可以使用附加到文章代码来执行相同的操作。

于 2012-12-21T14:26:04.797 回答
-1

请阅读这篇文章 LINQ TO DATATABLE in WCF ,连接到 Adventure 数据库。

数据集不实现 IEnumerable/IQueryable 接口。

所以请阅读这篇文章。

http://www.wnewsone.com/tutorials/wcf/ShowArticle.aspx?articleid=20143

于 2012-12-27T09:23:42.007 回答