Linq - 加入2个表并选择所有列VB.Net

时间:2017-05-31 14:26:27

标签: vb.net linq

我正在尝试使用linq内连接两个DataTables并返回包含DataTables中所有列的结果

Dim qryResult = (From qryAllItemsAllFields In dtAllItemsAllFields
                 Join qryGetAttributes In dtGetAttributes On qryGetAttributes.Field(Of String)("ITNBR") Equals qryAllItemsAllFields.Field(Of String)("itemnum")
                Select New With {qryGetAttributes, qryAllItemsAllFields}).ToList()

此查询的结果永远不会返回任何结果(我检查过,此连接的结果应返回结果)。我对linq很陌生,所以任何指导都会非常感激。

更新:我一直在四处寻找,发现代码生成的列表的项目数是6000(所以它产生了结果),但是当我尝试将列表绑定到GridView时它抛出一个错误说:带有id' gvTest'的GridView的数据源。没有任何属性或属性来生成列。确保您的数据源包含内容。

1 个答案:

答案 0 :(得分:0)

使用一些相当反射的重型代码,可以将匿名对象转换为Dictionary然后将它们组合,或将它们转换为ExpandoObject并将它们组合起来。这可以防止处理大量字段,并提供类似LINQ缺少的SQL *通配符,但我不知道我会推荐它用于生产。

Dim qryResult = (From qryAllItemsAllFields In dtAllItemsAllFields
                 Join qryGetAttributes In dtGetAttributes On qryGetAttributes.Field(Of String)("ITNBR") Equals qryAllItemsAllFields.Field(Of String)("itemnum")
                Select qryGetAttributes.ToExpando().AddAnon(qryAllItemsAllFields)).ToList()

我的扩展程序是用C#编写的,但上面的结果是ExpandoObject,其中两个源对象的所有字段都被展平,这对于GridView来说可能是可以接受的。