1

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

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);

到目前为止,通过我的尝试,我收到了Expression 预期的错误消息或NO PROPERTY C EXISTS IN PERSON。如何更好地动态定义我的赋值表达式?提前致谢。

4

1 回答 1

0

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

C# 和 Visual Basic 编译器只能从表达式 lambda(或单行 lambda)生成表达式树。它无法解析语句 lambdas(或多行 lambdas)。有关 C# 中 lambda 表达式的更多信息,请参阅Lambda 表达式(C# 编程指南);(...)。

第二个可以使用 DynamicLINQ 之类的库来完成。

于 2013-09-09T16:26:16.010 回答