我有以下代码,我宁愿动态定义。
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 :(得分:0)
第一个不起作用,因为c#编译器无法将多行lambda转换为表达式树(并且IQueryable.Select
需要表达式)。
C#和Visual Basic编译器只能生成表达式树 来自表达式lambdas(或单行lambdas)。 无法解析 语句lambdas(或多行lambdas)。有关的更多信息 C#中的lambda表达式,见Lambda Expressions (C# Programming Guide); (...)。
第二个可以使用像DynamicLINQ这样的库来完成。