我正在尝试使用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的数据源。没有任何属性或属性来生成列。确保您的数据源包含内容。
答案 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
来说可能是可以接受的。