/// <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); }
/// <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()); }
/// <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}"); }
/// <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()); }
/// <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()); }