Basierend auf der Anforderung muss ich einen dynamisch generierten Eigenschaftsnamen für das dynamische Objekt übergeben.Wie erstellt man ein Objekt mit dynamischem Eigenschaftsnamen und analysiert es mit System.Linq.Expressions?
var dynamicObj = new { State = "Caifornia" };
Anstelle von State sollte ich in der Lage sein, einen beliebigen Namen zu übergeben. Hier ist mein Code soweit. Alles funktioniert, aber ich kann nicht herausfinden, wie man den Namen der Eigenschaft dynamisch macht. So etwas wie var dynamicObj = new { "State" = "Caifornia" };
var rule = new Rule("State", "NotEqual", "Florida");
var dynamicObj = new { State = "Caifornia" };
var expression = Expression.Parameter(dynamicObj.GetType(), "State");
var property = Expression.Property(expression, "State");
var propertyType = dynamicObj.GetType().GetProperty(rule.MemberName).PropertyType;
var isValid = false;
ExpressionType tBinary;
if (Enum.TryParse(rule.Operator, out tBinary))
{
var right = Expression.Constant(Convert.ChangeType(rule.TargetValue, propertyType));
var result = Expression.MakeBinary(tBinary, property, right);
var func = typeof(Func<,>).MakeGenericType(dynamicObj.GetType(), typeof(bool));
var expr = Expression.Lambda(func, result, expression).Compile();
isValid = (bool)expr.DynamicInvoke(dynamicObj);
}
return isValid;
ich stark vermuten, dass Sie nicht in der Lage sein, dies zu tun, weil anonyme Typen, die Compiler erfordern um einen geeigneten Typ mit einer Eigenschaft zum Zeitpunkt der Kompilierung zu erstellen. –
Danke @JonSkeet – German