mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-19 18:22:23 +08:00
增加join 为4个
This commit is contained in:
@@ -501,6 +501,71 @@ namespace SqlSugar
|
|||||||
queryable.QueryBuilder.JoinQueryInfos.Add(new JoinQueryInfo() { JoinIndex = 1, JoinType = joinType2, JoinWhere = exp2.GetResultString(), TableName = sqlBuilder.GetPackTable(sql3, shortName3) });
|
queryable.QueryBuilder.JoinQueryInfos.Add(new JoinQueryInfo() { JoinIndex = 1, JoinType = joinType2, JoinWhere = exp2.GetResultString(), TableName = sqlBuilder.GetPackTable(sql3, shortName3) });
|
||||||
return queryable;
|
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
|
#endregion
|
||||||
|
|
||||||
public virtual ISugarQueryable<T> UnionAll<T>(params ISugarQueryable<T>[] queryables) where T : class, new()
|
public virtual ISugarQueryable<T> UnionAll<T>(params ISugarQueryable<T>[] queryables) where T : class, new()
|
||||||
|
@@ -7,7 +7,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace SqlSugar
|
namespace SqlSugar
|
||||||
{
|
{
|
||||||
public interface ISqlSugarClient: IDisposable
|
public interface ISqlSugarClient : IDisposable
|
||||||
{
|
{
|
||||||
MappingTableList MappingTables { get; set; }
|
MappingTableList MappingTables { get; set; }
|
||||||
MappingColumnList MappingColumns { get; set; }
|
MappingColumnList MappingColumns { get; set; }
|
||||||
@@ -109,12 +109,20 @@ namespace SqlSugar
|
|||||||
where T2 : class, new();
|
where T2 : class, new();
|
||||||
|
|
||||||
ISugarQueryable<T, T2, T3> Queryable<T, T2, T3>(ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, ISugarQueryable<T3> joinQueryable3,
|
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 joinType1, Expression<Func<T, T2, T3, bool>> joinExpression1,
|
||||||
JoinType joinType2, Expression<Func<T, T2,T3, bool>> joinExpression2)
|
JoinType joinType2, Expression<Func<T, T2, T3, bool>> joinExpression2)
|
||||||
where T: class, new()
|
where T : class, new()
|
||||||
where T2 : class, new()
|
where T2 : class, new()
|
||||||
where T3 : 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<T>(ISugarQueryable<T> queryable) where T : class, new();
|
ISugarQueryable<T> Queryable<T>(ISugarQueryable<T> queryable) where T : class, new();
|
||||||
ISugarQueryable<T> Queryable<T>(string shortName);
|
ISugarQueryable<T> Queryable<T>(string shortName);
|
||||||
|
@@ -320,7 +320,17 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
return this.Context.Queryable(joinQueryable1, joinQueryable2, joinQueryable3, joinType1, joinExpression1, joinType2, joinExpression2).With(SqlWith.Null);
|
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>()
|
public ISugarQueryable<T> Queryable<T>()
|
||||||
{
|
{
|
||||||
|
@@ -400,7 +400,14 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
return ScopedContext.Queryable(joinQueryable1, joinQueryable2, joinQueryable3,joinType1,joinExpression1,joinType2,joinExpression2);
|
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>()
|
public ISugarQueryable<T> Queryable<T>()
|
||||||
{
|
{
|
||||||
return ScopedContext.Queryable<T>();
|
return ScopedContext.Queryable<T>();
|
||||||
|
Reference in New Issue
Block a user