Вам понадобится синтаксический анализатор языка C # (по крайней мере v3.5, возможно v4.0, в зависимости от того, какие функции языка C # вы хотите поддерживать в LINQ). Вы возьмете те результаты синтаксического анализа и передадите их непосредственно в дерево выражений, используя шаблон посетителя. Я еще не уверен, но готов поспорить, что вам также понадобится некоторая форма анализа типов для полной генерации узлов Expression.
Я ищу то же самое, что и вы, но мне это на самом деле не нужно так сильно, поэтому я не искал и не писал никакого кода по этим строкам.
Я написал что-то, что принимает ввод строки пользователя и компилирует его в динамическую сборку, используя класс провайдера Microsoft.CSharp.CSharpCodeProvider
. Если вы просто хотите взять строки кода и выполнить результат, это должно подойти вам.
Вот описание консольного инструмента, который я написал, LinqFilter:
http://bittwiddlers.org/?p=141
Вот исходный репозиторий. LinqFilter / Program.cs демонстрирует, как использовать компилятор для компиляции выражения LINQ:
http://bittwiddlers.org/viewsvn/trunk/public/LinqFilter/?root=WellDunne