Информация об изменениях

Сообщение Re: IQuerable: на пороге велосипеда от 15.09.2017 8:53

Изменено 15.09.2017 9:39 Danchik

Re: IQuerable: на пороге велосипеда
Здравствуйте, LWhisper, Вы писали:

[Skip]

LW>Я стою на пороге написания собственного IQuerable, который будет по разному транслировать запросы на стороне клиента и сервера, оттопыривая наружу единый API.

LW>Меня беспокоит тот факт, что придется повторить путь Linq2Db с моделью CodeFirst, собрать все возможные грабли и реализовать не самый простой интерфейс с разбором экспрешшенов.
LW>Есть ли пути проще?

CodeFirst? Самописный есть?

LW>Также буду рад если вы поделитесь чем-нибудь помимо примеров с MSDN касательно IQuerable и best practice по написанию подобных велосипедов.


Пару варинтов:

  1. В linq2db есть Wcf Linq Servive. Может на его основе сие замутить? Пока он умет Linq запрос прокидывать на сервер, там строить SQL и возвращать назад результат.
  2. IQueryable прекрасно разбирается через Relinq. Он строит свой AST на экспрешинах и разбирать его па порядки проще. самплы
    Пропарсать просто можешь парой строчек:
    IQueryable<Entity> entities = ....
    var parser = QueryParser.CreateDefault();
    var ast    = parser.ExpressionTreeParser.ParseTree(entities.Expression);

    Там уже в дебаггере разбираешься что же он тебе напарсил. Там все красиво по полочкам разложено. Только вот сомневаюсь что ты сможешь сие дело сериализировать, наверняка придется трансформировать их AST в свой.
Re: IQuerable: на пороге велосипеда
Здравствуйте, LWhisper, Вы писали:

[Skip]

LW>Я стою на пороге написания собственного IQuerable, который будет по разному транслировать запросы на стороне клиента и сервера, оттопыривая наружу единый API.

LW>Меня беспокоит тот факт, что придется повторить путь Linq2Db с моделью CodeFirst, собрать все возможные грабли и реализовать не самый простой интерфейс с разбором экспрешшенов.
LW>Есть ли пути проще?

CodeFirst? Самописный есть?

LW>Также буду рад если вы поделитесь чем-нибудь помимо примеров с MSDN касательно IQuerable и best practice по написанию подобных велосипедов.


Пару вариантов:

  1. В linq2db есть Wcf Linq Servive. Может на его основе сие замутить? Пока он умет Linq запрос прокидывать на сервер, там строить SQL и возвращать назад результат.
  2. IQueryable прекрасно разбирается через Relinq. Он строит свой AST на экспрешинах и разбирать его па порядки проще. самплы
    Пропарсать просто можешь парой строчек:
    IQueryable<Entity> entities = ....
    var parser = QueryParser.CreateDefault();
    var ast    = parser.ExpressionTreeParser.ParseTree(entities.Expression);

    Там уже в дебаггере разбираешься что же он тебе напарсил. Там все красиво по полочкам разложено. Только вот сомневаюсь что ты сможешь сие дело сериализировать, наверняка придется трансформировать их AST в свой.