LINQ动态分配表达式

时间:2013-09-09 16:22:12

标签: c# linq lambda

我有以下代码,我宁愿动态定义。

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 。如何更好地动态定义赋值表达式?提前谢谢。

1 个答案:

答案 0 :(得分:0)

第一个不起作用,因为c#编译器无法将多行lambda转换为表达式树(并且IQueryable.Select需要表达式)。

  

C#和Visual Basic编译器只能生成表达式树   来自表达式lambdas(或单行lambdas)。 无法解析   语句lambdas(或多行lambdas)。有关的更多信息   C#中的lambda表达式,见Lambda Expressions (C# Programming Guide); (...)。

第二个可以使用像DynamicLINQ这样的库来完成。