我有三个DataTable需要连接在一起,并使用连接的数据作为GridView的DataSource。第一个(localSQLTable
)通过针对MS-SQL数据库的查询进行填充。后两个(serviceResponse.Tables(0)
和serviceResponse.Tables(1)
)是使用DataSet.ReadXML
从Web服务的结果构建的。LINQ to DataSet - 连接和GridView问题
我这个地步得到:
Dim joinedData = From f In localSQLTable _
Join s1 As DataRow In serviceResponse.Tables(0) _
On f.Item("KNum") Equals s1.Item("Number") _
Join s2 As DataRow In serviceResponse.Tables(1) _
On s1.Item("KNumber_Id") Equals s2.Item("KNumber_Id") _
Select Guid = f.Item("Guid"), Num = f.Item("Num"), Desc = f.Item("Desc"), KNum = f.Item("KNum"), KDesc = s2.Item("KDescription_Text"), Type = s2.Item("Type") _
Where (Type.ToString.ToUpper = "LONG_HTML")
myGridView.DataSource = joinedData
myGridView.DataBind()
但是,它似乎joinedData
只是一个IEnumerable(匿名类型)。我已经尝试了一些东西,包括以下内容:
- 使用lambda函数(我是其中不熟悉的话)来建立新的DataRow试图建立
joinedData
作为一个IEnumerable(中的DataRow) - 调用
.ToList()
或.AsEnumerable()
的结果(与类型玩弄后)设置
的主要问题是,不管什么我似乎尝试,有一些错误使用结果作为数据源为我的GridView的 - 我两个例外之一:
- 带ID的GridView的数据源没有任何要从中生成列的属性或属性。确保您的数据源包含内容。
- 数据源不支持服务器端数据分页。
我也知道我可能不应该使用.Item ("Field")
,而不是在我的Linq查询的强类型.Field (Of T)("Field")
- 我是在不改变等到我已经得到了数据的实际可用。
我没有和Linq结婚;如果DataSet.Merge
更合适(或其他一些方法),我会招待它。还有一种明显的可能性,那就是我实际上不得不在晚些时候加入其他两个DataTable。如果是这样的话,我可能会将serviceResponse
表合并为一个,所以我仍然只能加入三张表。
那么我能做些什么来将这些数据结合在一起并将结果用作我的GridView的DataSource?而且我所做的任何事情都会比在我的原始DataTable(localSQLTable
)中添加两个额外列并使用XML响应数据逐行填充它们更快?
对不起等待。我很乐意保持AutoGenerateColumns的真实性 - 我会尽快尝试并回复您。 – 2011-04-08 20:26:54
没有工作 - 看起来像一个铸造问题,就像我需要明确选择数据行,也许。我收到以下内容: '无法将类型为<<可怕的长字符串的对象称为匿名类型'来键入'System.Collections.Generic.IEnumerable'1 [System.Data.DataRow]'。' – 2011-04-11 15:23:49
'在表上添加AsEnumerable()? – Magnus 2011-04-11 15:43:04