diff --git a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs index ddbb27819..b6b33119e 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/1_Query.cs @@ -188,6 +188,11 @@ namespace OrmTest.Demo var getDateIsSame= db.Queryable().Where(it => SqlFunc.DateIsSame(DateTime.Now,DateTime.Now,DateType.Hour)).ToList(); var getSqlList = db.Queryable().AS("(select * from student) t").ToList(); + + + var getUnionAllList = db.UnionAll(db.Queryable().Where(it => it.Id == 1), db.Queryable().Where(it => it.Id == 2)).ToList(); + + var getUnionAllList2 = db.UnionAll(db.Queryable(), db.Queryable()).ToList(); } public static void Page() { diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs index 2574956a8..e14ce5f9d 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs @@ -73,21 +73,11 @@ namespace SqlSugar } public virtual string GetPackTable(string sql, string shortName) { - return string.Format(" ({0}) {1} ", sql, shortName); + return UtilMethods.GetPackTable(sql,shortName); } public virtual void RepairReplicationParameters(ref string appendSql, SugarParameter[] parameters, int addIndex) { - if (appendSql.IsValuable() && parameters.IsValuable()) - { - foreach (var parameter in parameters.OrderByDescending(it=>it.ParameterName.Length)) - { - //Compatible with.NET CORE parameters case - var name = parameter.ParameterName; - string newName = name + addIndex; - appendSql = appendSql.Replace(name, newName); - parameter.ParameterName = newName; - } - } + UtilMethods.RepairReplicationParameters(ref appendSql,parameters,addIndex); } #endregion diff --git a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs index 9c47b4c42..13489086f 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.Net/SqlSugar/SqlSugarClient.cs @@ -261,37 +261,37 @@ namespace SqlSugar } #region 9-12 - public virtual ISugarQueryable Queryable(Expression> joinExpression) where T : class, new() + public virtual ISugarQueryable Queryable(Expression> joinExpression) where T : class, new() { - InitMppingInfo(); - var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8),typeof(T9) }; - var queryable = InstanceFactory.GetQueryable(base.CurrentConnectionConfig); + InitMppingInfo(); + var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9) }; + var queryable = InstanceFactory.GetQueryable(base.CurrentConnectionConfig); base.CreateEasyQueryJoin(joinExpression, types, queryable); queryable.Where(joinExpression); return queryable; } - public virtual ISugarQueryable Queryable(Expression> joinExpression) where T : class, new() + public virtual ISugarQueryable Queryable(Expression> joinExpression) where T : class, new() { - InitMppingInfo(); - var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9) ,typeof(T10)}; - var queryable = InstanceFactory.GetQueryable(base.CurrentConnectionConfig); + InitMppingInfo(); + var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10) }; + var queryable = InstanceFactory.GetQueryable(base.CurrentConnectionConfig); base.CreateEasyQueryJoin(joinExpression, types, queryable); queryable.Where(joinExpression); return queryable; } - public virtual ISugarQueryable Queryable(Expression> joinExpression) where T : class, new() + public virtual ISugarQueryable Queryable(Expression> joinExpression) where T : class, new() { - InitMppingInfo(); - var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10),typeof(T11) }; - var queryable = InstanceFactory.GetQueryable(base.CurrentConnectionConfig); + InitMppingInfo(); + var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11) }; + var queryable = InstanceFactory.GetQueryable(base.CurrentConnectionConfig); base.CreateEasyQueryJoin(joinExpression, types, queryable); queryable.Where(joinExpression); return queryable; } - public virtual ISugarQueryable Queryable(Expression> joinExpression) where T : class, new() + public virtual ISugarQueryable Queryable(Expression> joinExpression) where T : class, new() { InitMppingInfo(); - var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11),typeof(T12) }; + var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12) }; var queryable = InstanceFactory.GetQueryable(base.CurrentConnectionConfig); base.CreateEasyQueryJoin(joinExpression, types, queryable); queryable.Where(joinExpression); @@ -299,23 +299,31 @@ namespace SqlSugar } #endregion - public virtual List UnionAll(params ISugarQueryable[] queryables) where T : class, new() + public virtual ISugarQueryable UnionAll(params ISugarQueryable[] queryables) where T : class, new() { - if (queryables.IsNullOrEmpty()) return new List(); - List result = new List(); + Check.Exception(queryables.IsNullOrEmpty(), "UnionAll.queryables is null "); + int i = 1; + List>> allItems =new List>>(); foreach (var item in queryables) { - var addItems = item.ToList(); - if (addItems.IsValuable()) - { - result.AddRange(addItems); - } + var sqlObj = item.ToSql(); + string sql = sqlObj.Key; + UtilMethods.RepairReplicationParameters(ref sql, sqlObj.Value.ToArray(), i); + if (sqlObj.Value.IsValuable()) + allItems.Add(new KeyValuePair>(sql, sqlObj.Value)); + else + allItems.Add(new KeyValuePair>(sql, new List())); + i++; } - return result; + var allSql = string.Join("UNION ALL \r\n", allItems.Select(it=>it.Key)); + var allParameters = allItems.SelectMany(it => it.Value).ToArray(); + var resulut = this.Queryable().AS(UtilMethods.GetPackTable(allSql, "unionTable")); + resulut.AddParameters(allParameters); + return resulut.Select("*"); } - public virtual List UnionAll(List> queryables) where T : class, new() + public virtual ISugarQueryable UnionAll(List> queryables) where T : class, new() { - if (queryables.IsNullOrEmpty()) return new List(); + Check.Exception(queryables.IsNullOrEmpty(), "UnionAll.queryables is null "); return UnionAll(queryables.ToArray()); } #endregion @@ -342,7 +350,7 @@ namespace SqlSugar Check.Exception(columnDictionary == null || columnDictionary.Count == 0, "Insertable.columnDictionary can't be null"); var insertObject = this.RewritableMethods.DeserializeObject(this.RewritableMethods.SerializeObject(columnDictionary)); var columns = columnDictionary.Select(it => it.Key).ToList(); - return this.Insertable(insertObject).InsertColumns(it => columns.Any(c => it.Equals(c,StringComparison.CurrentCultureIgnoreCase))); ; + return this.Insertable(insertObject).InsertColumns(it => columns.Any(c => it.Equals(c, StringComparison.CurrentCultureIgnoreCase))); ; } public virtual IInsertable Insertable(dynamic insertDynamicObject) where T : class, new() { @@ -353,10 +361,10 @@ namespace SqlSugar } else { - var columns= ((object)insertDynamicObject).GetType().GetProperties().Select(it => it.Name).ToList(); + var columns = ((object)insertDynamicObject).GetType().GetProperties().Select(it => it.Name).ToList(); Check.Exception(columns.IsNullOrEmpty(), "Insertable.updateDynamicObject can't be null"); T insertObject = this.RewritableMethods.DeserializeObject(this.RewritableMethods.SerializeObject(insertDynamicObject)); - return this.Insertable(insertObject).InsertColumns(it=> columns.Any(c=>it.Equals(c,StringComparison.CurrentCultureIgnoreCase))); + return this.Insertable(insertObject).InsertColumns(it => columns.Any(c => it.Equals(c, StringComparison.CurrentCultureIgnoreCase))); } } #endregion diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs index f45ec08ff..685fd5541 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs @@ -54,5 +54,25 @@ namespace SqlSugar { return (T)Convert.ChangeType(obj, typeof(T)); } + + internal static void RepairReplicationParameters(ref string appendSql, SugarParameter[] parameters, int addIndex) + { + if (appendSql.IsValuable() && parameters.IsValuable()) + { + foreach (var parameter in parameters.OrderByDescending(it => it.ParameterName.Length)) + { + //Compatible with.NET CORE parameters case + var name = parameter.ParameterName; + string newName = name + addIndex; + appendSql = appendSql.Replace(name, newName); + parameter.ParameterName = newName; + } + } + } + + internal static string GetPackTable(string sql, string shortName) + { + return string.Format(" ({0}) {1} ", sql, shortName); + } } }