2013-09-09 4 views
1

У меня есть следующий код, который я бы предпочла определить динамически.Выражения динамического присваивания LINQ

var candidates = People.Where(x=> (x.Age >18 && x.Age < 25)) .AsQueryable().Select( c=> { c.Category = "F190 MISSING" ; return c; }); 

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

String Conditional= "c=> { c.Category = @0; return c; }"; 
String[] ExpressionParameters = new [] {"F190 MISSING"}; 

var candidates = People.Where(x=> (x.Age >18 && x.Age < 25)).AsQueryable().Select(Conditional,ExpressionParameters); 

До сих пор мои попытки, я получал либо в Ожидаемое выражение сообщение об ошибке или НЕТ НЕДВИЖИМОСТИ C EXISTS IN PERSON. Как я могу лучше определить выражение присваивания динамически? Заранее спасибо.

+0

Кто-нибудь может предоставить мне информацию, которая могла бы помочь мне лучше решить это, пожалуйста? – Kobojunkie

ответ

0

Первый не работает, потому что компилятор C# не может преобразовать многострочный лямбда в Дерево выражений (и IQueryable.Select ожидает выражение).

C# и Visual Basic компиляторов могут генерировать дерева выражений только из выражения лямбды (или однострочных лямбд). Невозможно разобрать заявление lambdas (или многострочные лямбды). Для получения дополнительной информации о лямбда-выражениях в C# см. Lambda Expressions (C# Programming Guide); (...).

Второй может быть выполнен с использованием библиотек, таких как DynamicLINQ.

+0

Многострочный я добавил, чтобы отобразить его правильно. Поэтому не нужно беспокоиться об этом. Мне больше нужно научиться определять его динамически. До сих пор мои попытки на втором не уступили. В настоящее время я использую DynamicLINQ, но все же могу понять, что именно. – Kobojunkie