как передать запрос LINQ службе WCF - PullRequest
2 голосов
/ 08 февраля 2010

У меня есть служба WCF, которая находится перед сбором данных. Я хотел бы иметь сервисный вызов, по которому клиент мог бы передать запрос LINQ или дерево выражений для выполнения в отношении сбора данных. Есть ли разумный способ передать запрос LINQ вызову службы WCF?

Спасибо.

1 Ответ

2 голосов
/ 08 февраля 2010

Текущие возможности для этого довольно ограничены. Невозможно сериализовать полный запрос Linq, в основном по тем же причинам, по которым вы не можете сериализовать произвольный код и отправить его куда-либо для выполнения (конечно, вы всегда можете динамически построить сборку, реализовать интерфейс и генерировать код вашего запроса ... но в тот момент вы сделали тонну).

Я уже пару раз писал системы, чтобы позволить настраиваемые возможности поиска по источнику данных Linq. По сути, все сводится к решению, какие типы запросов вам нужно поддерживать. Сделайте это как можно проще, а затем создайте структуру данных, которая представляет это. Если вам нужна полная общность, то вы начнете стремиться к чему-то, что похоже на деревья выражений, но часто это излишне для вашей цели.

Затем вам нужно написать переводчик, который берет структуру данных вашего пользовательского запроса и создает запрос Linq. Использование подходящих инструментов (например, LinqKit ) может сделать это на удивление легкой задачей. Но вам придется стать экспертом в области деревьев выражений и их манипулирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...