Пример #1
0
        /// <summary>
        /// 转换UnaryExpression
        /// </summary>
        /// <param name="expression"></param>w
        /// <returns></returns>
        protected virtual string ConvertMemberExpression(MemberExpression expression)
        {
            var memberExpression = expression;

            while (true)
            {
                if (memberExpression == null || memberExpression.Expression == null)
                {
                    break;
                }
                if (memberExpression.Expression.NodeType == ExpressionType.Parameter)
                {
                    return(ExpressionHelper.ReplaceExpressionParamter(expression.ToString()));
                }
                if (memberExpression.Expression.NodeType == ExpressionType.MemberAccess)
                {
                    memberExpression = memberExpression.Expression as MemberExpression;
                }
                else
                {
                    break;
                }
            }
            var name = CreateParamterName();

            SetParameter(name, expression.GetExpressionValue());
            return(string.Format("@{0}", name));
        }
Пример #2
0
        private static NodeBase Resolve(MemberExpression memberExpression, MemberExpression rootExpression = null)
        {
            rootExpression = rootExpression ?? memberExpression;
            switch (memberExpression.Expression.NodeType)
            {
            case ExpressionType.Parameter:
                return(new MemberNode
                {
                    TableName = TableInfo.GetTableName(rootExpression),
                    FieldName = TableInfo.GetColumnName(rootExpression)
                });

            case ExpressionType.MemberAccess:
                return(Resolve(memberExpression.Expression as MemberExpression, rootExpression));

            case ExpressionType.Call:
            case ExpressionType.Constant:
                return(new ValueNode {
                    Value = rootExpression.GetExpressionValue()
                });

            default:
                throw new ArgumentException("Expected member expression");
            }
        }