Сообщение Re: IQuerable: на пороге велосипеда от 15.09.2017 8:53
Изменено 15.09.2017 8:54 Danchik
Re: IQuerable: на пороге велосипеда
Здравствуйте, LWhisper, Вы писали:
[Skip]
LW>Я стою на пороге написания собственного IQuerable, который будет по разному транслировать запросы на стороне клиента и сервера, оттопыривая наружу единый API.
LW>Меня беспокоит тот факт, что придется повторить путь Linq2Db с моделью CodeFirst, собрать все возможные грабли и реализовать не самый простой интерфейс с разбором экспрешшенов.
LW>Есть ли пути проще?
CodeFirst? Самописный есть?
LW>Также буду рад если вы поделитесь чем-нибудь помимо примеров с MSDN касательно IQuerable и best practice по написанию подобных велосипедов.
Пару варинтов:
[Skip]
LW>Я стою на пороге написания собственного IQuerable, который будет по разному транслировать запросы на стороне клиента и сервера, оттопыривая наружу единый API.
LW>Меня беспокоит тот факт, что придется повторить путь Linq2Db с моделью CodeFirst, собрать все возможные грабли и реализовать не самый простой интерфейс с разбором экспрешшенов.
LW>Есть ли пути проще?
CodeFirst? Самописный есть?
LW>Также буду рад если вы поделитесь чем-нибудь помимо примеров с MSDN касательно IQuerable и best practice по написанию подобных велосипедов.
Пару варинтов:
- В linq2db есть Wcf Linq Servive. Может на его основе сие замутить? Пока он умет Linq запрос прокидывать на сервер, там строить SQL и возвращать назад результат.
IQueryable прекрасно разбирается через Relink. Он строит свой AST на экспрешинах и разбирать его па порядки проще. самплы
Пропарсать просто можешь парой строчек:
IQueryable<Entity> entities = ....
var parser = QueryParser.CreateDefault();
var ast = QueryParser.CreateDefault().ExpressionTreeParser.ParseTree(entities.Expression);
Там уже в дебаггере разбираешься что же он тебе напарсил. Там все красиво по полочкам разложено. Только вот сомневаюсь что ты сможешь сие дело сериализировать, наверняка придется трансформировать их AST в свой.
Re: IQuerable: на пороге велосипеда
Здравствуйте, LWhisper, Вы писали:
[Skip]
LW>Я стою на пороге написания собственного IQuerable, который будет по разному транслировать запросы на стороне клиента и сервера, оттопыривая наружу единый API.
LW>Меня беспокоит тот факт, что придется повторить путь Linq2Db с моделью CodeFirst, собрать все возможные грабли и реализовать не самый простой интерфейс с разбором экспрешшенов.
LW>Есть ли пути проще?
CodeFirst? Самописный есть?
LW>Также буду рад если вы поделитесь чем-нибудь помимо примеров с MSDN касательно IQuerable и best practice по написанию подобных велосипедов.
Пару варинтов:
[Skip]
LW>Я стою на пороге написания собственного IQuerable, который будет по разному транслировать запросы на стороне клиента и сервера, оттопыривая наружу единый API.
LW>Меня беспокоит тот факт, что придется повторить путь Linq2Db с моделью CodeFirst, собрать все возможные грабли и реализовать не самый простой интерфейс с разбором экспрешшенов.
LW>Есть ли пути проще?
CodeFirst? Самописный есть?
LW>Также буду рад если вы поделитесь чем-нибудь помимо примеров с MSDN касательно IQuerable и best practice по написанию подобных велосипедов.
Пару варинтов:
- В linq2db есть Wcf Linq Servive. Может на его основе сие замутить? Пока он умет Linq запрос прокидывать на сервер, там строить SQL и возвращать назад результат.
IQueryable прекрасно разбирается через Relinq. Он строит свой AST на экспрешинах и разбирать его па порядки проще. самплы
Пропарсать просто можешь парой строчек:
IQueryable<Entity> entities = ....
var parser = QueryParser.CreateDefault();
var ast = QueryParser.CreateDefault().ExpressionTreeParser.ParseTree(entities.Expression);
Там уже в дебаггере разбираешься что же он тебе напарсил. Там все красиво по полочкам разложено. Только вот сомневаюсь что ты сможешь сие дело сериализировать, наверняка придется трансформировать их AST в свой.