У меня есть три DataTables, которые мне нужно объединить и использовать объединенные данные в качестве источника данных для GridView. Первый (localSQLTable
) заполняется с помощью запроса к базе данных MS-SQL. Вторые два (serviceResponse.Tables(0)
и 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
как IEnumerable (Of DataRow) с использованием лямбда-функции (о которой я совсем не знаком) для создания нового DataRow
- Вызов
.ToList()
или .AsEnumerable()
(после игры с типами) в наборе результатов
Основная проблема заключается в том, что независимо от того, что я, похоже, пытаюсь использовать, я использую результаты в качестве источника данных для моего GridView, что-то не так - у меня есть одно из двух исключений:
- Источник данных для GridView с идентификатором не имеет каких-либо свойств или атрибутов для создания столбцов. Убедитесь, что ваш источник данных имеет содержимое.
- Источник данных не поддерживает подкачку данных на стороне сервера.
Я также знаю, что, вероятно, не следовало бы использовать .Item ("Field")
вместо строго типизированного .Field (Of T)("Field")
в моем запросе Linq - я ждал этого изменения, пока не получу данные, пригодные для использования.
Я не женат на Линке; если DataSet.Merge
будет более подходящим (или другой методологией), я буду развлекать его. Существует также явная возможность того, что мне придется присоединить то, что у меня есть, к двум другим таблицам данных позже. В таком случае я, скорее всего, объединю таблицы serviceResponse
в одну, поэтому я все равно буду объединять только три таблицы.
Итак, что я могу сделать, чтобы объединить эти данные и использовать результат в качестве источника данных моего GridView? И все, что я делаю, будет быстрее, чем просто добавление двух дополнительных столбцов в моей исходной таблице данных (localSQLTable
) и заполнение их строка за строкой с использованием данных ответа XML?