public virtual ISugarQueryable <T> UnionAll <T>(params ISugarQueryable <T>[] queryables) where T : class, new() { var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig); Check.Exception(queryables.IsNullOrEmpty(), "UnionAll.queryables is null "); int i = 1; List <KeyValuePair <string, List <SugarParameter> > > allItems = new List <KeyValuePair <string, List <SugarParameter> > >(); foreach (var item in queryables) { var sqlObj = item.ToSql(); string sql = sqlObj.Key; UtilMethods.RepairReplicationParameters(ref sql, sqlObj.Value.ToArray(), i); if (sqlObj.Value.IsValuable()) { allItems.Add(new KeyValuePair <string, List <SugarParameter> >(sql, sqlObj.Value)); } else { allItems.Add(new KeyValuePair <string, List <SugarParameter> >(sql, new List <SugarParameter>())); } i++; } var allSql = sqlBuilder.GetUnionAllSql(allItems.Select(it => it.Key).ToList()); var allParameters = allItems.SelectMany(it => it.Value).ToArray(); var resulut = this.Queryable <ExpandoObject>().AS(UtilMethods.GetPackTable(allSql, "unionTable")); resulut.AddParameters(allParameters); return(resulut.Select <T>("*")); }
public virtual ISugarQueryable <T, T2> Queryable <T, T2>( ISugarQueryable <T> joinQueryable1, ISugarQueryable <T2> joinQueryable2, JoinType joinType, Expression <Func <T, T2, bool> > joinExpression) where T : class, new() where T2 : class, new() { Check.Exception(joinQueryable1.QueryBuilder.Take != null || joinQueryable1.QueryBuilder.Skip != null || joinQueryable1.QueryBuilder.OrderByValue.HasValue(), "joinQueryable1 Cannot have 'Skip' 'ToPageList' 'Take' Or 'OrderBy'"); Check.Exception(joinQueryable2.QueryBuilder.Take != null || joinQueryable2.QueryBuilder.Skip != null || joinQueryable2.QueryBuilder.OrderByValue.HasValue(), "joinQueryable2 Cannot have 'Skip' 'ToPageList' 'Take' Or 'OrderBy'"); var sqlBuilder = InstanceFactory.GetSqlbuilder(base.Context.CurrentConnectionConfig); sqlBuilder.Context = base.Context; InitMppingInfo <T, T2>(); var types = new Type[] { typeof(T2) }; var queryable = InstanceFactory.GetQueryable <T, T2>(base.CurrentConnectionConfig); queryable.Context = base.Context; queryable.SqlBuilder = sqlBuilder; queryable.QueryBuilder = InstanceFactory.GetQueryBuilder(base.CurrentConnectionConfig); queryable.QueryBuilder.JoinQueryInfos = new List <JoinQueryInfo>(); queryable.QueryBuilder.Builder = sqlBuilder; queryable.QueryBuilder.Context = base.Context; queryable.QueryBuilder.EntityType = typeof(T); queryable.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(base.CurrentConnectionConfig); //master var shortName1 = joinExpression.Parameters[0].Name; var sqlObj1 = joinQueryable1.ToSql(); string sql1 = sqlObj1.Key; UtilMethods.RepairReplicationParameters(ref sql1, sqlObj1.Value.ToArray(), 0); queryable.QueryBuilder.EntityName = sqlBuilder.GetPackTable(sql1, shortName1);; queryable.QueryBuilder.Parameters.AddRange(sqlObj1.Value); //join table 1 var shortName2 = joinExpression.Parameters[1].Name; var sqlObj2 = joinQueryable2.ToSql(); string sql2 = sqlObj2.Key; UtilMethods.RepairReplicationParameters(ref sql2, sqlObj2.Value.ToArray(), 1); queryable.QueryBuilder.Parameters.AddRange(sqlObj2.Value); var exp = queryable.QueryBuilder.GetExpressionValue(joinExpression, ResolveExpressType.WhereMultiple); queryable.QueryBuilder.JoinQueryInfos.Add(new JoinQueryInfo() { JoinIndex = 0, JoinType = joinType, JoinWhere = exp.GetResultString(), TableName = sqlBuilder.GetPackTable(sql2, shortName2) }); return(queryable); }
public virtual void RepairReplicationParameters(ref string appendSql, SugarParameter[] parameters, int addIndex) { UtilMethods.RepairReplicationParameters(ref appendSql, parameters, addIndex); }