增加join 为4个

This commit is contained in:
admin 2022-03-25 14:57:59 +08:00
parent 8a613bc5ac
commit 467f70a476
4 changed files with 99 additions and 9 deletions

View File

@ -501,6 +501,71 @@ namespace SqlSugar
queryable.QueryBuilder.JoinQueryInfos.Add(new JoinQueryInfo() { JoinIndex = 1, JoinType = joinType2, JoinWhere = exp2.GetResultString(), TableName = sqlBuilder.GetPackTable(sql3, shortName3) });
return queryable;
}
public virtual ISugarQueryable<T, T2, T3,T4> Queryable<T, T2, T3,T4>(
ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, ISugarQueryable<T3> joinQueryable3, ISugarQueryable<T4> joinQueryable4,
JoinType joinType1, Expression<Func<T, T2, T3, T4, bool>> joinExpression1,
JoinType joinType2, Expression<Func<T, T2, T3, T4, bool>> joinExpression2,
JoinType joinType3, Expression<Func<T, T2, T3,T4, bool>> joinExpression3
) where T : class, new() where T2 : class, new() where T3 : class, new() where T4 : 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'");
Check.Exception(joinQueryable3.QueryBuilder.Take != null || joinQueryable3.QueryBuilder.Skip != null || joinQueryable3.QueryBuilder.OrderByValue.HasValue(), "joinQueryable3 Cannot have 'Skip' 'ToPageList' 'Take' Or 'OrderBy'");
Check.Exception(joinQueryable4.QueryBuilder.Take != null || joinQueryable4.QueryBuilder.Skip != null || joinQueryable4.QueryBuilder.OrderByValue.HasValue(), "joinQueryable4 Cannot have 'Skip' 'ToPageList' 'Take' Or 'OrderBy'");
var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig);
sqlBuilder.Context = this;
InitMappingInfo<T, T2, T3,T4>();
var types = new Type[] { typeof(T2) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3,T4>(this.CurrentConnectionConfig);
queryable.Context = this.Context;
queryable.SqlBuilder = sqlBuilder;
queryable.QueryBuilder = InstanceFactory.GetQueryBuilder(this.CurrentConnectionConfig);
queryable.QueryBuilder.JoinQueryInfos = new List<JoinQueryInfo>();
queryable.QueryBuilder.Builder = sqlBuilder;
queryable.QueryBuilder.Context = this;
queryable.QueryBuilder.EntityType = typeof(T);
queryable.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.CurrentConnectionConfig);
//master
var shortName1 = joinExpression1.Parameters[0].Name;
var sqlObj1 = joinQueryable1.ToSql();
string sql1 = sqlObj1.Key;
UtilMethods.RepairReplicationParameters(ref sql1, sqlObj1.Value.ToArray(), 0, "Join");
queryable.QueryBuilder.EntityName = sqlBuilder.GetPackTable(sql1, shortName1); ;
queryable.QueryBuilder.Parameters.AddRange(sqlObj1.Value);
//join table 1
var shortName2 = joinExpression1.Parameters[1].Name;
var sqlObj2 = joinQueryable2.ToSql();
string sql2 = sqlObj2.Key;
UtilMethods.RepairReplicationParameters(ref sql2, sqlObj2.Value.ToArray(), 1, "Join");
queryable.QueryBuilder.Parameters.AddRange(sqlObj2.Value);
var exp = queryable.QueryBuilder.GetExpressionValue(joinExpression1, ResolveExpressType.WhereMultiple);
queryable.QueryBuilder.JoinQueryInfos.Add(new JoinQueryInfo() { JoinIndex = 0, JoinType = joinType1, JoinWhere = exp.GetResultString(), TableName = sqlBuilder.GetPackTable(sql2, shortName2) });
//join table 2
var shortName3 = joinExpression1.Parameters[2].Name;
var sqlObj3 = joinQueryable3.ToSql();
string sql3 = sqlObj3.Key;
UtilMethods.RepairReplicationParameters(ref sql3, sqlObj3.Value.ToArray(), 2, "Join");
queryable.QueryBuilder.Parameters.AddRange(sqlObj3.Value);
var exp2 = queryable.QueryBuilder.GetExpressionValue(joinExpression2, ResolveExpressType.WhereMultiple);
queryable.QueryBuilder.JoinQueryInfos.Add(new JoinQueryInfo() { JoinIndex = 1, JoinType = joinType2, JoinWhere = exp2.GetResultString(), TableName = sqlBuilder.GetPackTable(sql3, shortName3) });
//join table 3
var shortName4 = joinExpression1.Parameters[3].Name;
var sqlObj4 = joinQueryable4.ToSql();
string sql4 = sqlObj4.Key;
UtilMethods.RepairReplicationParameters(ref sql4, sqlObj4.Value.ToArray(), 3, "Join");
queryable.QueryBuilder.Parameters.AddRange(sqlObj4.Value);
var exp3 = queryable.QueryBuilder.GetExpressionValue(joinExpression3, ResolveExpressType.WhereMultiple);
queryable.QueryBuilder.JoinQueryInfos.Add(new JoinQueryInfo() { JoinIndex = 1, JoinType = joinType3, JoinWhere = exp3.GetResultString(), TableName = sqlBuilder.GetPackTable(sql4, shortName4) });
return queryable;
}
#endregion
public virtual ISugarQueryable<T> UnionAll<T>(params ISugarQueryable<T>[] queryables) where T : class, new()

View File

@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace SqlSugar
{
public interface ISqlSugarClient: IDisposable
public interface ISqlSugarClient : IDisposable
{
MappingTableList MappingTables { get; set; }
MappingColumnList MappingColumns { get; set; }
@ -25,7 +25,7 @@ namespace SqlSugar
AopProvider Aop { get; }
ICodeFirst CodeFirst { get; }
IDbFirst DbFirst { get; }
IDbMaintenance DbMaintenance { get; }
EntityMaintenance EntityMaintenance { get; set; }
@ -109,12 +109,20 @@ namespace SqlSugar
where T2 : class, new();
ISugarQueryable<T, T2, T3> Queryable<T, T2, T3>(ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, ISugarQueryable<T3> joinQueryable3,
JoinType joinType1, Expression<Func<T, T2,T3, bool>> joinExpression1,
JoinType joinType2, Expression<Func<T, T2,T3, bool>> joinExpression2)
where T: class, new()
where T2 : class, new()
JoinType joinType1, Expression<Func<T, T2, T3, bool>> joinExpression1,
JoinType joinType2, Expression<Func<T, T2, T3, bool>> joinExpression2)
where T : class, new()
where T2 : class, new()
where T3 : class, new();
ISugarQueryable<T, T2, T3, T4> Queryable<T, T2, T3, T4>(ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, ISugarQueryable<T3> joinQueryable3, ISugarQueryable<T4> joinQueryable4,
JoinType joinType1, Expression<Func<T, T2, T3, T4, bool>> joinExpression1,
JoinType joinType2, Expression<Func<T, T2, T3, T4, bool>> joinExpression2,
JoinType joinType3, Expression<Func<T, T2, T3, T4, bool>> joinExpression4)
where T : class, new()
where T2 : class, new()
where T3 : class, new()
where T4 : class, new();
ISugarQueryable<T> Queryable<T>();
ISugarQueryable<T> Queryable<T>(ISugarQueryable<T> queryable) where T : class, new();
ISugarQueryable<T> Queryable<T>(string shortName);
@ -150,7 +158,7 @@ namespace SqlSugar
Task<Tuple<List<T>, List<T2>, List<T3>, List<T4>>> SaveQueuesAsync<T, T2, T3, T4>(bool isTran = true);
Task<Tuple<List<T>, List<T2>, List<T3>>> SaveQueuesAsync<T, T2, T3>(bool isTran = true);
Task<Tuple<List<T>, List<T2>>> SaveQueuesAsync<T, T2>(bool isTran = true);
Task<List<T>> SaveQueuesAsync<T>(bool isTran = true);
Task<List<T>> SaveQueuesAsync<T>(bool isTran = true);
#endregion
#region Union

View File

@ -320,7 +320,17 @@ namespace SqlSugar
{
return this.Context.Queryable(joinQueryable1, joinQueryable2, joinQueryable3, joinType1, joinExpression1, joinType2, joinExpression2).With(SqlWith.Null);
}
public ISugarQueryable<T, T2, T3,T4> Queryable<T, T2, T3, T4>(ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, ISugarQueryable<T3> joinQueryable3, ISugarQueryable<T4> joinQueryable4,
JoinType joinType1, Expression<Func<T, T2, T3,T4, bool>> joinExpression1,
JoinType joinType2, Expression<Func<T, T2, T3, T4, bool>> joinExpression2,
JoinType joinType3, Expression<Func<T, T2, T3, T4, bool>> joinExpression3)
where T : class, new()
where T2 : class, new()
where T3 : class, new()
where T4 : class ,new ()
{
return this.Context.Queryable(joinQueryable1, joinQueryable2, joinQueryable3, joinQueryable4, joinType1, joinExpression1, joinType2, joinExpression2,joinType3, joinExpression3).With(SqlWith.Null);
}
public ISugarQueryable<T> Queryable<T>()
{

View File

@ -400,7 +400,14 @@ namespace SqlSugar
{
return ScopedContext.Queryable(joinQueryable1, joinQueryable2, joinQueryable3,joinType1,joinExpression1,joinType2,joinExpression2);
}
public ISugarQueryable<T, T2, T3,T4> Queryable<T, T2, T3, T4>(ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, ISugarQueryable<T3> joinQueryable3, ISugarQueryable<T4> joinQueryable4, JoinType joinType1, Expression<Func<T, T2, T3, T4, bool>> joinExpression1, JoinType joinType2, Expression<Func<T, T2, T3, T4, bool>> joinExpression2, JoinType joinType3, Expression<Func<T, T2, T3, T4, bool>> joinExpression3)
where T : class, new()
where T2 : class, new()
where T3 : class, new()
where T4 : class, new()
{
return ScopedContext.Queryable(joinQueryable1, joinQueryable2, joinQueryable3, joinQueryable4, joinType1, joinExpression1, joinType2, joinExpression2, joinType3, joinExpression3);
}
public ISugarQueryable<T> Queryable<T>()
{
return ScopedContext.Queryable<T>();