要件に基づいて、以下の動的オブジェクトに動的に生成されたプロパティ名を渡す必要があります。動的プロパティ名でオブジェクトを作成し、System.Linq.Expressionsで解析する方法は?
var dynamicObj = new { State = "Caifornia" };
代わりに、任意の名前を渡すことができます。ここまでは私のコードです。すべてが機能しますが、プロパティ名を動的にする方法を理解できません。 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;
コンパイル時にプロパティを持つ適切な型を作成します。 –
ありがとう@JonSkeet – German