示例#1
0
        /// <summary>
        /// 解析查询条件
        /// </summary>
        /// <param name="abstractSet"></param>
        /// <param name="whereSql"></param>
        /// <param name="Params"></param>
        /// <param name="prefix"></param>
        /// <returns></returns>
        public virtual List <WhereExpression> ResolveWhereList(AbstractSet abstractSet, ref string whereSql, DynamicParameters Params, string prefix = null, bool IsAsName = true)
        {
            //添加Linq生成的sql条件和参数
            List <LambdaExpression> lambdaExpressionList = abstractSet.WhereExpressionList;
            StringBuilder           builder             = new StringBuilder("WHERE 1=1 ");
            List <WhereExpression>  whereExpressionList = new List <WhereExpression>();

            for (int i = 0; i < lambdaExpressionList.Count; i++)
            {
                var whereParam = new WhereExpression(lambdaExpressionList[i], prefix, providerOption, IsAsName);
                whereExpressionList.Add(whereParam);
                builder.Append(whereParam.SqlCmd);
                //参数
                foreach (var paramKey in whereParam.Param.ParameterNames)
                {
                    Params.Add(paramKey, whereParam.Param.Get <object>(paramKey));
                }
            }
            //添加自定义sql生成的条件和参数
            if ((abstractSet.WhereBuilder != null && abstractSet.WhereBuilder.Length != 0) || (abstractSet.Params != null && abstractSet.Params.ParameterNames.Count() != 0))
            {
                //添加自定义条件sql
                builder.Append(abstractSet.WhereBuilder);
                Params.AddDynamicParams(abstractSet.Params);
            }
            whereSql = builder.ToString();
            return(whereExpressionList);
        }
示例#2
0
        /// <summary>
        /// 解析查询条件
        /// </summary>
        /// <param name="abstractSet"></param>
        /// <param name="whereSql"></param>
        /// <param name="prefix"></param>
        /// <returns></returns>
        public virtual string ResolveWhereList(AbstractSet abstractSet, string prefix = null)
        {
            //添加Linq生成的sql条件和参数
            List <LambdaExpression> lambdaExpressionList = abstractSet.WhereExpressionList;
            StringBuilder           builder = new StringBuilder("WHERE 1=1 ");

            for (int i = 0; i < lambdaExpressionList.Count; i++)
            {
                var whereParam = new WhereExpression(lambdaExpressionList[i], $"{prefix}_{i}", providerOption);
                builder.Append(whereParam.SqlCmd);
                //参数
                foreach (var paramKey in whereParam.Param.ParameterNames)
                {
                    abstractSet.Params.Add(paramKey, whereParam.Param.Get <object>(paramKey));
                }
            }
            //添加自定义sql生成的条件和参数
            if ((abstractSet.WhereBuilder != null && abstractSet.WhereBuilder.Length != 0) || (abstractSet.Params != null && abstractSet.Params.ParameterNames.Count() != 0))
            {
                //添加自定义条件sql
                builder.Append(abstractSet.WhereBuilder);
                ////参数
                //foreach (var paramKey in abstractSet.Params.ParameterNames)
                //{
                //	if (!Params.ParameterNames.Contains(paramKey))
                //		Params.Add(paramKey, abstractSet.Params.Get<object>(paramKey));
                //}
            }
            return(builder.ToString());
        }
示例#3
0
        /// <summary>
        /// 解析排序
        /// </summary>
        /// <param name="abstractSet"></param>
        /// <returns></returns>
        public virtual string ResolveOrderBy(AbstractSet abstractSet)
        {
            var orderByList = abstractSet?.OrderbyExpressionList.Select(a =>
            {
                var entity     = EntityCache.QueryEntity(a.Key.Type.GenericTypeArguments[0]);
                var columnName = a.Key.Body.GetCorrectPropertyName();
                return($"{entity.GetAsName(providerOption)}" + providerOption.CombineFieldName(columnName) + (a.Value == EOrderBy.Asc ? " ASC " : " DESC "));
            }) ?? new List <string>();

            if (!orderByList.Any() && (abstractSet.OrderbyBuilder == null || abstractSet.OrderbyBuilder.Length == 0))
            {
                return("");
            }

            return($"ORDER BY {string.Join(",", orderByList)} {abstractSet.OrderbyBuilder}");
        }
示例#4
0
        /// <summary>
        /// 解析分组
        /// </summary>
        /// <param name="abstractSet"></param>
        /// <returns></returns>
        public virtual string ResolveGroupBy(AbstractSet abstractSet)
        {
            StringBuilder builder         = new StringBuilder();
            var           groupExpression = abstractSet.GroupExpressionList;

            if (groupExpression != null && groupExpression.Any())
            {
                for (int i = 0; i < groupExpression.Count; i++)
                {
                    var groupParam = new GroupExpression(groupExpression[i], $"Group_{i}", providerOption);
                    if (builder.Length != 0)
                    {
                        builder.Append(",");
                    }
                    builder.Append(groupParam.SqlCmd);
                }
                builder.Insert(0, " GROUP BY ");
            }
            return(builder.ToString());
        }
示例#5
0
        /// <summary>
        /// 解析分组聚合条件
        /// </summary>
        /// <param name="abstractSet"></param>
        /// <returns></returns>
        public virtual string ResolveHaving(AbstractSet abstractSet)
        {
            StringBuilder builder          = new StringBuilder();
            var           havingExpression = abstractSet.HavingExpressionList;

            if (havingExpression != null && havingExpression.Any())
            {
                for (int i = 0; i < havingExpression.Count; i++)
                {
                    var whereParam = new WhereExpression(havingExpression[i], $"Having_{i}", providerOption);
                    builder.Append(whereParam.SqlCmd);
                    //参数
                    foreach (var paramKey in whereParam.Param.ParameterNames)
                    {
                        abstractSet.Params.Add(paramKey, whereParam.Param.Get <object>(paramKey));
                    }
                }
                builder.Insert(0, " Having 1=1 ");
            }
            return(builder.ToString());
        }