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