結合する必要がある 3 つの DataTables があり、結合されたデータを GridView の DataSource として使用します。最初の ( localSQLTable
) は、MS-SQL データベースに対するクエリによって入力されます。2 番目の 2 つ (serviceResponse.Tables(0)
と) は、Web サービスの結果をserviceResponse.Tables(1)
使用して構築されます。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 (匿名型) のようです。以下を含むいくつかのことを試しました。
joinedData
新しいDataRowを構築するためにラムダ関数(私はまったく慣れていません)を使用してIEnumerable(Of DataRow)として構築しようとしています- 結果セットで
.ToList()
or (型をいじった後) を呼び出す.AsEnumerable()
主な問題は、私が何をしようとしても、結果を GridView の DataSource として使用すると何か問題があるということです - 私は2つの例外のうちの1つを得ました:
- ID を持つ GridView のデータ ソースには、列を生成するためのプロパティまたは属性がありませんでした。データ ソースにコンテンツがあることを確認します。
- データ ソースは、サーバー側のデータ ページングをサポートしていません。
.Item ("Field")
また、Linq クエリで厳密に型指定されたものの代わりに使用するべきではないこともわかってい.Field (Of T)("Field")
ます。データが実際に使用可能になるまで、その変更を待っていました。
私はLinqと結婚していません。より適切な場合DataSet.Merge
(または他の方法論)、私はそれを楽しませます。また、後で別の 2 つの DataTables に実際に結合する必要があるという明確な可能性もあります。その場合は、serviceResponse
テーブルを 1 つにマージする可能性が高いため、結合するテーブルは 3 つだけです。
では、このデータを結合し、結果を GridView の DataSource として使用するにはどうすればよいでしょうか? また、元の DataTable ( localSQLTable
) に 2 つの余分な列を追加し、XML 応答データを使用して行ごとに入力するよりも、私が行っていることは速くなるでしょうか?