MemberExpression:从范围”引用的InvalidOperationExpression变量\'x\',但未定义
|
我正在使用System.Linq.Expressions
我试图构建一个包含MemberExpression的简单LambdaExpression。如果我使用System.Linq.Expressions API(例如MakeMemberAccess)显式创建MemberExpression,则会收到错误“从范围\'\'引用的InvalidOperationExpression变量\'x \',但未定义\“在LambdaExpression上调用Compile()。
例如,这是我的代码
Expression<Func<Customer, string>> expression1, expression2, expression3;
Func<Customer, string> fn;
expression1 = (x) => x.Title;
fn = expression1.Compile();//works
fn(c);
MemberExpression m;
m = Expression.MakeMemberAccess(
Expression.Parameter(typeof(Customer), \"x\"), typeof(Customer).GetProperty(\"Title\"));
expression2 = Expression.Lambda<Func<Customer, string>>(m,
Expression.Parameter(typeof(Customer), \"x\"));
m = Expression.Property(Expression.Parameter(typeof(Customer),\"x\"), \"Title\");
expression3 = Expression.Lambda<Func<Customer, string>>(m,
Expression.Parameter(typeof(Customer), \"x\"));
fn = expression3.Compile();//InvalidOperationExpression variable \'x\' referenced from scope \'\', but it is not defined
fn = expression2.Compile();//InvalidOperationExpression variable \'x\' referenced from scope \'\', but it is not defined
当调用Compile()方法时,expression2和expression3引发异常,但expression1不会; expression1起作用。为什么是这样?当我调用Compile()时,如何创建类似于表达式2、3的MemberExpression,并使它们工作(不引发异常)?
谢谢
没有找到相关结果
已邀请:
1 个回复
究补闯
基本上,参数表达式不与名称匹配-您必须在各处使用相同的表达式。有点痛苦,但是我们去了...