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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Своя реализация Select 
:(
    Опции темы
Vyacheslav
Дата 10.8.2013, 17:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

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



Итак предыстория. При  разработке проекта меня обязали использовать DataTable с неким самописным фраймворком, который дает возможность писать запросы используя свои собственные expression.
Основной недостаток этой системы - невозможность прикрыть использования БД каким либо единообразным  интерфейсом.
Почему был принято такое решение - вопрос  в данном случае второстепенный. 
В общем я решил написать Linq provider к предоставленному фреймвоку, который должен стандартные Expression преобразовывать в expression SomeFrameWork
Было  БД => Ado.Net => SomeFrameWork =>  DataTable
Стало БД => Ado.Net => SomeFrameWor  =>Linq => DataTable or collection of Anonym class

Доступ  закрыл интерфейсами  Repository  и  UnitOfWork

Не решена только  одна проблема
Вот такое  работает
 from obj1 in rep.Query select obj1 
а вот такое уже нет
 from obj1 in rep.Query select obj1 => new { obj1.A, obj1.B }
Селект идет к БД  как и ожидалось только на два поля, но при полученнии результата происходит ошибка преобразования IEnumerable<DataRow> в IEnumerable<Анонимный класс> 
Не могу понять,  как реализовать  обработку селекта, чтобы где-то сохранить и преобразование.

Кто нибудь знает, как select  обрабатывается так, что  происходит снчала формирование запроса  (IQueryable) и затем, при получении результата, (IEnumerable)  вызывается преобразование  ?

 

Это сообщение отредактировал(а) Vyacheslav - 10.8.2013, 20:16


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
jonie
Дата 28.8.2013, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



Цитата(Vyacheslav @  10.8.2013,  18:21 Найти цитируемый пост)


Кто нибудь знает, как select  обрабатывается так, что  происходит снчала формирование запроса  (IQueryable) и затем, при получении результата, (IEnumerable)  вызывается преобразование  ?

ну собственно это обычное поведение Linq провайдеров (нормальных).

Суть: до момента непосредственно выборки в что-то вроде ToList<T>() вы работаете с Expression-ом, который, в момент ToList() преобразуется к реальному запросу в базу.

Для написания своих Linq  провайдеров можно взять за основу IQToolkit - это пример от Microsoft по построению своих linq провайдеров и кучка хелперов которые могут стать основой для вашего провайдера.



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




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


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

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