mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-07-31 15:56:25 +08:00
增加join 为4个
This commit is contained in:
parent
8a613bc5ac
commit
467f70a476
@ -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()
|
||||
|
@ -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
|
||||
|
@ -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>()
|
||||
{
|
||||
|
@ -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>();
|
||||
|
Loading…
Reference in New Issue
Block a user