1
実行時に生成されたオブジェクトを渡すラムダ式をコンパイルする必要があります。ここに私がこれまで持っていたコードがあります。実行時に生成されたオブジェクトを渡すラムダ式をコンパイルする方法はありますか?
例:
var anonType = new { Name = "Florida" }.GetType();
var myObj = Activator.CreateInstance(anonType, "Florida");
var expression = Expression.Parameter(myObj.GetType(), "Name");
var property = Expression.Property(expression, "Name");
var rule = new Rule("Name", "NotEqual", "Florida");
ExpressionType tBinary;
if (!Enum.TryParse(rule.Operator, out tBinary)) return;
var propertyType = myObj.GetType().GetProperty(rule.MemberName).PropertyType;
var right = Expression.Constant(Convert.ChangeType(rule.TargetValue, propertyType));
var result = Expression.MakeBinary(tBinary, property, right);
var expr = Expression.Lambda<Func<Type, bool>>(result, expression).Compile();
var isValid = expr(anonType);
そのラムダ式をコンパイルしようとしたとき、私はラインでのエラーを取得しています。
Additional information: ParameterExpression of type '<>f__AnonymousType0`1[System.String]' cannot be used for delegate parameter of type 'System.Type'
あなたの事例では、このようにラムダをコンパイルできますか?そうでない場合は、ソリューションがそれに依存しているため、それを提供してください。 –