C# 有没有办法编译一个lambda表达式来传递一个对象生成的运行时?

C# 有没有办法编译一个lambda表达式来传递一个对象生成的运行时?,c#,lambda,C#,Lambda,我需要编译一个lambda表达式来传递运行时生成的对象。这是我到目前为止的代码 例如: var anonType = new { Name = "Florida" }.GetType(); var myObj = Activator.CreateInstance(anonType, "Florida"); var expression = Expression.Parameter(myObj.GetType(), "Name"); var property = Expression.Prope

我需要编译一个lambda表达式来传递运行时生成的对象。这是我到目前为止的代码

例如:

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);
var anonType=new{Name=“Florida”}.GetType();
var myObj=Activator.CreateInstance(anonType,“Florida”);
var expression=expression.Parameter(myObj.GetType(),“Name”);
var property=Expression.property(表达式“Name”);
var规则=新规则(“名称”、“NotEqual”、“佛罗里达”);
表达型tBinary;
如果(!Enum.TryParse(rule.Operator,out-tBinary))返回;
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(结果,表达式).Compile();
var isValid=expr(anonType);
当它试图编译Lambda表达式时,我在这一行遇到了一个错误

Additional information: ParameterExpression of type '<>f__AnonymousType0`1[System.String]' cannot be used for delegate parameter of type 'System.Type'
其他信息:类型为“f_uuAnonymousType0`1[System.String]”的ParameterExpression不能用于类型为“System.type”的委托参数

不确定你想用它实现什么,但会回答你的直接问题。在您的案例中,可以像这样编译lambda:

// create Func<AnonymousType, bool>
var func = typeof(Func<,>).MakeGenericType(anonType,typeof(bool));            
// compile
var expr = Expression.Lambda(func, result, expression).Compile();
// invoke
var isValid = expr.DynamicInvoke(new { Name = "NotFlorida" });
//创建函数
var func=typeof(func).MakeGenericType(anonType,typeof(bool));
//编撰
var expr=Expression.Lambda(func,result,Expression).Compile();
//援引
var isValid=expr.DynamicInvoke(新的{Name=“NotFlorida”});

您的示例是真实的用例吗?如果没有,最好提供它,因为解决方案取决于此。谢谢@Evk。你的回答帮助我解决了我遇到的错误。