小编sha*_*mia的帖子

Expression.PropertyOrField 为字符串属性返回“不是‘System.String’类型的成员”

我正在尝试为规则引擎动态构建表达式,并且一切进展顺利,直到我尝试允许将嵌套类型和属性指定为操作数。样本:

表达式构建器

public Expression BuildExpression<T>(string propertyName, Enums.Operator ruleOperator, object value, ParameterExpression parameterExpression)
    {
        ExpressionType expressionType = new ExpressionType();
        Expression body = parameterExpression;

        foreach (var member in propertyName.Split('.'))
        {
            body = MemberExpression.Property(body, member);
        }

        var leftOperand = MemberExpression.PropertyOrField(body, propertyName);
        var rightOperand = Expression.Constant(Convert.ChangeType(value, value.GetType()));
        FieldInfo fieldInfo = expressionType.GetType().GetField(Enum.GetName(typeof(Enums.Operator), ruleOperator));
        var expressionTypeValue = (ExpressionType)fieldInfo.GetValue(ruleOperator);

        return CastBuildExpression(expressionTypeValue, value, leftOperand, rightOperand);
    }
Run Code Online (Sandbox Code Playgroud)

规则引擎

public Func<T, bool>[] CombineRules<T>(Criterion[] criteria)
    {
        List<Func<T, bool>> list = new List<Func<T, bool>>();
        foreach (var criterion in criteria)
        {                    
            ExpressionBuilder expressionBuilder …
Run Code Online (Sandbox Code Playgroud)

.net c# lambda expression-trees

6
推荐指数
1
解决办法
1840
查看次数

标签 统计

.net ×1

c# ×1

expression-trees ×1

lambda ×1