Преобразовать запрос LINQ в строку, отправить на удаленный сервер, чтобы разобрать в выражение, используя Roslyn? - PullRequest
1 голос
/ 10 марта 2012

У меня есть источник данных, такой как IDataSource : IEnumerable<IDynamicObject>

Одна реализация запрашивает чистые XML-данные, а другая - базу данных SQL.

Мои источники данных не имеют конкретных типов и работают только с простыми типами схем.

В некоторых сценариях эти источники данных создаются в одном и том же контексте времени выполнения, а в других они доступны по сети.

Мне не удалось запросить мои источники данных с помощью LINQ, и я планирую использовать динамические объекты для извлечения и анализа только тех значений элементов, которые являются частью фактического запроса.

Это прекрасно работает при работе в том же контексте времени выполнения, но когда источник данных находится за веб-службой на удаленном сервере, это не удается, потому что я не могу использовать LINQ с веб-службой любым способом, о котором я знаю.

Поэтому я искал способ форматирования запросов LINQ в виде строки и отправки его на сервер, затем проанализировал его обратно в выражение и выполнил в новом контексте.

Два метода парсинга выражения, которые я смог найти, были Dynamic LINQ и FLEE . Я только кратко посмотрел на них, но ни один из них, похоже, не смог отформатировать выражение в строку, а также проанализировать его?

Я читал о Roslyn-проекте и думал, может, его можно использовать для этой проблемы? Кто-нибудь знает больше об этом?

Я тоже смотрел на IQueryable<TData>, но я прочитал много негативных вещей об этом, поэтому, возможно, мне следует избегать этого. Также он строго типизирован, что не соответствует моим потребностям, потому что я не хочу никаких конкретных типов на сервере данных. Я также не понимаю, как это может быть использовано через веб-сервис, будучи строго типизированным? Я что-то упустил?

Ответы [ 3 ]

4 голосов
/ 11 марта 2012

Roslyn в конечном итоге даст вам возможность взять выражение LINQ в виде строки, проанализировать его и оценить.Однако текущий общедоступный CTP (выпущенный в октябре 2011 года) не поддерживает выражения LINQ.

2 голосов
/ 10 марта 2012

Это больше похоже на то, что вам нужно, чтобы иметь возможность сериализовать деревья выражений, но не обязательно как строку C #.

Сериализация дерева выражений образец в MSDN делает именно это.Он даже включает в себя пример службы WCF и cient, которые делают именно то, что вы хотите, используя IQueryable<T>.

0 голосов
/ 19 марта 2012

Я думаю, что нашел свой ответ сейчас:

Службы данных WCF !

Как я мог пропустить это! Я думал, что это было только для Entity Framework ...

...