Как разобрать строку как выражение linq? - PullRequest
0 голосов
/ 22 июня 2010

У меня есть выражение linq to devforce:

(из r в mgr.testTables выберите r) .OrderBy (r => r.id);

Я хочу указать сортировкуимя столбца в виде строки, мне нужно что-то вроде этого:

string orderBy = "r => r.id"; (из r в mgr.testTables выберите r) .OrderBy ( orderBy );

есть ли способ проанализировать строку как выражение linq?

Ответы [ 2 ]

1 голос
/ 22 июня 2010

Существует пример полностью работающего синтаксического анализатора выражений, который фактически сделает это за вас, основываясь на строке в C # Samples для Visual Studio 2008 в MSDN Code Gallery, в разделе DynamicQuery .(Элемент управления LinqDataSource использует слегка измененную версию этого образца для внутреннего использования.)

1 голос
/ 22 июня 2010

Один из вариантов - использовать для этого проект Dynamic LINQ . Я думаю, что это то же самое, что DynamicQuery, упомянутый Рубеном. В любом случае, он позволяет писать такие вещи, как:

var res = db.Table.Where("CategoryID == 2").Select("CategoryName");

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

Альтернативой является составление дерева выражений из простых фрагментов кода (таких как функции, которые получают доступ к различным свойствам и различные операторы, которые можно использовать для сравнения их со значениями). Я думаю, что это более элегантно и требует меньше накладных расходов. Я написал о этом подходе здесь , и есть тип с именем PredicateBuilder , который делает его проще.

...