技术学习

我所喜欢的

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Lambda表达式树解析主要通过ExpressionVisitor来实现,最终达到动态处理的效果:

ProductOrder po = new ProductOrder { OrderID = "2025", OrderDate = DateTime.Now };

            Expression<Func<ProductOrder, ProductOrderDetail, bool>> condition = (x, y) => x.OrderID == y.OrderID;

            
            
            if (condition is LambdaExpression)
            {
                if(condition.Body is BinaryExpression)
                {
                    BinaryExpression binaryExpression = condition.Body as BinaryExpression;
                    MemberExpression left = binaryExpression.Left as MemberExpression;
                    ParameterExpression leftParamExp = left.Expression as ParameterExpression;
                    //System.Linq.Expressions.ExpressionType

                    if (condition.Parameters[0].Name == leftParamExp.Name)
                    {
                        //leftParamExp
                        MemberInfo mi = left.Member;
                        PropertyInfo pi = po.GetType().GetProperty(mi.Name);
                        object ov = pi.GetValue(po);
                        //mi.get
                    }
                    //binaryExpression.Left
                }

                //BinaryExpression lambdaCondition = condition as BinaryExpression;
                //if(lambdaCondition.Parameters[0] == lambdaCondition. )
            }

  

posted on 2022-01-25 11:50  飘扬De黑夜  阅读(217)  评论(0编辑  收藏  举报