|
Модераторы: gambit |
|
Vyacheslav |
|
|||
Эксперт Профиль Группа: Экс. модератор Сообщений: 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 -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
jonie |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: нет Всего: 118 |
ну собственно это обычное поведение Linq провайдеров (нормальных). Суть: до момента непосредственно выборки в что-то вроде ToList<T>() вы работаете с Expression-ом, который, в момент ToList() преобразуется к реальному запросу в базу. Для написания своих Linq провайдеров можно взять за основу IQToolkit - это пример от Microsoft по построению своих linq провайдеров и кучка хелперов которые могут стать основой для вашего провайдера. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |