Exemplo n.º 1
0
        /// <summary>
        /// 拼接MemberExpression
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="builder"></param>
        protected virtual void BuilderMemberExpression(MemberExpression expression, StringBuilder builder)
        {
            var name = ExpressionHelper.ReplaceExpressionParamter(expression.ToString());

            name = GetSubName(expression.ToString(), name);
            builder.Append(string.Format("{0},", name));
        }
Exemplo n.º 2
0
        /// <summary>
        /// 拼接常规
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="builder"></param>
        /// <param name="asName"></param>
        protected virtual void BuilderMemberAssignmentAccess(MemberAssignment expression, StringBuilder builder, string asName)
        {
            var name = ExpressionHelper.ReplaceExpressionParamter(expression.Expression.ToString());

            name = GetSubName(expression.Expression.ToString(), name);
            builder.Append(string.Format("{0} as {1},", name, MergeName(asName, expression.Member.Name)));
        }
Exemplo n.º 3
0
 /// <summary>
 /// 拼接NewExpression
 /// </summary>
 /// <param name="expression"></param>
 /// <param name="builder"></param>
 protected virtual void BuilderNewExpression(NewExpression expression, StringBuilder builder)
 {
     foreach (var args in expression.Arguments)
     {
         builder.Append(string.Format("{0},", ExpressionHelper.ReplaceExpressionParamter(args.ToString())));
     }
 }
Exemplo n.º 4
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));
        }
Exemplo n.º 5
0
        /// <summary>
        /// 拼接常规
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="builder"></param>
        /// <param name="asName"></param>
        protected virtual void BuilderMemberAssignmentAccess(MemberAssignment expression, StringBuilder builder, string asName)
        {
            var name = ExpressionHelper.ReplaceExpressionParamter(expression.Expression.ToString());

            if (expression.Expression.ToString().Contains(".Key."))
            {
                if (((MemberExpression)expression.Expression).Expression.Type.ToString().Contains("<>"))
                {
                    name = name.Replace("Key.", "");
                }
            }
            builder.Append(string.Format("{0} as {1},", name, MergeName(asName, expression.Member.Name)));
        }
Exemplo n.º 6
0
        /// <summary>
        /// 编译
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="expression"></param>
        protected virtual void BuilderQueryProvider(MethodCallExpression expression, StringBuilder builder)
        {
            var t     = expression.Arguments[0] as MethodCallExpression;
            var query = new QueryInfo {
                Parameters = Query.Parameters
            };
            var queryProvider = new QueryProvider(query);

            while (t != null)
            {
                queryProvider.Translate(t);
                if (t.Arguments.Count > 0 && t.Arguments[0].NodeType == ExpressionType.Call)
                {
                    t = t.Arguments[0] as MethodCallExpression;
                }
                else
                {
                    break;
                }
            }
            builder.Append(t == null?"":ExpressionHelper.ReplaceExpressionParamter(t.Arguments[0].ToString()));
            if (query.PageSize > 0)
            {
                builder.AppendFormat(".Take({0}).Skip({1})", query.PageSize, query.PageSize * query.PageIndex);
            }
            if (!string.IsNullOrEmpty(query.WhereExp))
            {
                builder.AppendFormat(".Where({0})", query.WhereExp);
            }
            if (!string.IsNullOrEmpty(query.OrderByExp))
            {
                builder.AppendFormat(".OrderBy({0})", query.OrderByExp);
            }
            if (!string.IsNullOrEmpty(query.GroupByExp))
            {
                builder.AppendFormat(".GroupBy({0})", query.GroupByExp);
            }
            if (!string.IsNullOrEmpty(query.HavingExp))
            {
                builder.AppendFormat(".Having({0})", query.HavingExp);
            }
            Query.Parameters = query.Parameters;
        }
Exemplo n.º 7
0
        /// <summary>
        /// 添加select方法
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="builder"></param>
        protected virtual void BuilderSelectMethodCallExpression(MethodCallExpression expression, StringBuilder builder)
        {
            if (expression.Arguments[0].NodeType == ExpressionType.Call)
            {
                var n = new StringBuilder();
                BuilderQueryProvider(expression, n);
                builder.Append(n);
            }
            else
            {
                builder.AppendFormat(ExpressionHelper.ReplaceExpressionParamter(expression.Arguments[0].ToString()));
            }
            var s = new StringBuilder();

            BuilderSelectExpression(((LambdaExpression)expression.Arguments[1]).Body, s);
            if (s.Length > 0)
            {
                s.Remove(s.Length - 1, 1);
            }
            builder.Append(string.Format(".Select({0})", s));
        }
Exemplo n.º 8
0
 /// <summary>
 /// 得到函数的参数名称
 /// </summary>
 /// <param name="expression"></param>
 /// <returns></returns>
 protected virtual string GetMethodCallExpressionName(Expression expression)
 {
     if (expression is UnaryExpression)
     {
         var unaryExpression = expression as UnaryExpression;
         return(unaryExpression.ConvertUnaryExpression());
     }
     if (expression is ConstantExpression || expression is MemberExpression)
     {
         var memberExpression = expression as MemberExpression;
         if (memberExpression != null)
         {
             var tMemberExpression = memberExpression;
             while (tMemberExpression != null)
             {
                 if (tMemberExpression.Expression is ParameterExpression)
                 {
                     return(ExpressionHelper.ReplaceExpressionParamter(memberExpression.ToString()));
                 }
                 tMemberExpression = tMemberExpression.Expression as MemberExpression;
             }
             var paramterName = CreateParamterName();
             SetParameter(paramterName, memberExpression.GetExpressionValue());
             return(string.Format("@{0}", paramterName));
         }
         var constantExpression = expression as ConstantExpression;
         var pName = CreateParamterName();
         SetParameter(pName, constantExpression.Value);
         return(string.Format("@{0}", pName));
     }
     if (expression.NodeType == ExpressionType.MemberAccess)
     {
         return(ExpressionHelper.ReplaceExpressionParamter(expression.ToString()));
     }
     return(GetInvokeValue(expression));
 }
Exemplo n.º 9
0
 /// <summary>
 /// 拼接MemberExpression
 /// </summary>
 /// <param name="expression"></param>
 /// <param name="builder"></param>
 protected virtual void BuilderMemberExpression(MemberExpression expression, StringBuilder builder)
 {
     builder.Append(string.Format("{0},",
                                  ExpressionHelper.ReplaceExpressionParamter(expression.ToString())));
 }
Exemplo n.º 10
0
 /// <summary>
 /// 拼接常规
 /// </summary>
 /// <param name="expression"></param>
 /// <param name="builder"></param>
 protected virtual void BuilderMemberAssignmentAccess(MemberAssignment expression, StringBuilder builder)
 {
     builder.Append(ExpressionHelper.ReplaceExpressionParamter(expression.Expression.ToString()));
 }