Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> VB.NET и LINQ заполнение таблицы запросом на объед, Выдает ошибку 
:(
    Опции темы
swetik1981
Дата 7.3.2012, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 20.12.2007

Репутация: нет
Всего: нет



Работаю с двумя таблицами: 

Код

' Fill the DataSet. 
Dim ds As New DataSet() 
 ds.Locale = CultureInfo.InvariantCulture 
' See the FillDataSet method in the Loading Data Into a DataSet topic. 
 FillDataSet(ds) 

Dim orders As DataTable = ds.Tables("SalesOrderHeader") 
Dim details As DataTable = ds.Tables("SalesOrderDetail")



 Если составляю на объединение такой запрос(вывод одной из двух объединённых таблиц): 

Код

Dim query = _ 
 From order In orders.AsEnumerable() _ 
 Join detail In details.AsEnumerable() _ 
 On order.Field(Of Integer)("SalesOrderID") Equals _ 
 detail.Field(Of Integer)("SalesOrderID") _ 
 Where order.Field(Of Boolean)("OnlineOrderFlag") = True And _ 
 order.Field(Of DateTime)("OrderDate").Month = 8 _ 
 Select detail


 то заполнение новой таблицы: 
Код

Dim table As DataTable = query.CopyToDataTable()


 происходит в нормальном порядке. 

 Но если запрос такой: 
Код

Dim query = _ 
 From order In orders.AsEnumerable() _ 
 Join detail In details.AsEnumerable() _ 
 On order.Field(Of Integer)("SalesOrderID") Equals _ 
 detail.Field(Of Integer)("SalesOrderID") _ 
 Where order.Field(Of Boolean)("OnlineOrderFlag") = True And _ 
 order.Field(Of DateTime)("OrderDate").Month = 8 _ 
 Select New With _ 
 { _ 
 .SalesOrderID = order.Field(Of Integer)("SalesOrderID"), _ 
 .SalesOrderDetailID = detail.Field(Of Integer)("SalesOrderDetailID"), _ 
 .OrderDate = order.Field(Of DateTime)("OrderDate"), _ 
 .ProductID = detail.Field(Of Integer)("ProductID") _ 
 }


 или даже такой 
Код

Dim query = _ 
 From order In orders.AsEnumerable() _ 
 Join detail In details.AsEnumerable() _ 
 On order.Field(Of Integer)("SalesOrderID") Equals _ 
 detail.Field(Of Integer)("SalesOrderID") _ 
 Where order.Field(Of Boolean)("OnlineOrderFlag") = True And _ 
 order.Field(Of DateTime)("OrderDate").Month = 8 _ 
 Select detail, order 


 то выдает ошибку: 
 "CopyToDataTable" не является членом "System.Collections.Generic.IEnumerable(Of <Анонимный тип>)" 

 Объясните, что делать и как это лечить ?
PM MAIL   Вверх
Kolovorot
Дата 23.10.2012, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 12.1.2009

Репутация: 1
Всего: 3



В первом случаи запрос возвращает EnumerableRowCollection<DataRow>.
Во втором случаи EnumerableRowCollection<Анонимный тип>.

Из описания метода CopyToDataTable становится все понятно:
Код

public static DataTable CopyToDataTable<T>(this IEnumerable<T> source) where T : DataRow;


Ну а в третьем случаи ошибка появляется во время написания код. Можно конечно в этом случаи использовать кортежи(Tuple<DataRow,DataRow>). И тогда запрос будет возвращать IEnumerable<Tuple<DataRow, DataRow>>. И для него можно написать свой метод CopyToDataTable
--------------------
Никогда еще истина не повисала на руке безусловного. Фридрих Ницше. Так говорил Заратустра
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.1023 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.