【发布时间】:2011-04-07 21:17:37
【问题描述】:
我需要将三个 DataTable 连接在一起,并将连接的数据用作 GridView 的 DataSource。第一个 (localSQLTable) 通过针对 MS-SQL 数据库的查询填充。后两个(serviceResponse.Tables(0) 和 serviceResponse.Tables(1))是使用来自 Web 服务结果的 DataSet.ReadXML 构建的。
我已经走到这一步了:
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 函数(我完全不熟悉)将
joinedData构建为 IEnumerable(Of DataRow) 以构建新的 DataRow - 在结果集上调用
.ToList()或.AsEnumerable()(在玩弄类型之后)
主要问题是,无论我尝试什么,使用结果作为我的 GridView 的数据源都有问题 - 我遇到了两个例外之一:
- ID 为 GridView 的数据源没有任何属性或属性可用于生成列。确保您的数据源有内容。
- 数据源不支持服务器端数据分页。
我也知道我可能不应该在我的 Linq 查询中使用 .Item ("Field") 而不是强类型的 .Field (Of T)("Field") - 我一直在等待该更改,直到我得到实际可用的数据。
我没有和 Linq 结婚;如果DataSet.Merge 更合适(或其他一些方法),我会接受的。还有一个明显的可能性是,我实际上必须稍后将我所拥有的内容加入另外两个 DataTable。如果是这种情况,我可能会将serviceResponse 表合并为一个,因此我仍然只会加入三个表。
那么我该怎么做才能将这些数据连接在一起并将结果用作我的 GridView 的数据源?我正在做的任何事情都会比在我的原始数据表 (localSQLTable) 中添加两个额外的列并使用 XML 响应数据逐行填充它们更快吗?
【问题讨论】:
标签: .net asp.net vb.net linq linq-to-dataset