2016-05-08 3 views
1

Ich muss einen Lambda-Ausdruck kompilieren, der eine vom Objekt generierte Laufzeit übergibt. Hier ist Code, den ich bisher habe.Gibt es eine Möglichkeit, einen Lambda-Ausdruck zu kompilieren, der eine vom Objekt generierte Laufzeit übergibt?

Ein Beispiel:

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

Ich erhalte einen Fehler an der Linie, wenn sein Versuch Lambda Ausdruck zu kompilieren.

Additional information: ParameterExpression of type '<>f__AnonymousType0`1[System.String]' cannot be used for delegate parameter of type 'System.Type' 
+0

Ist Ihr Beispiel ein echter Anwendungsfall? Wenn nicht, besorgen Sie es besser, weil die Lösung davon abhängt. –

Antwort

2

Nicht sicher, was Sie damit erreichen wollen, aber Ihre direkte Frage beantworten wird. Sie können Lambda so in Ihrem Fall kompilieren:

+0

Danke @Evk. Ihre Antwort hat mir geholfen, den Fehler zu beheben, den ich bekommen habe. – German

Verwandte Themen