Merge pull

This commit is contained in:
sunkaixuan
2022-04-08 22:24:14 +08:00
parent d381d3da09
commit 33c8a34b4e
5 changed files with 120 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) }); 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()

View File

@@ -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; }
@@ -25,7 +25,7 @@ namespace SqlSugar
AopProvider Aop { get; } AopProvider Aop { get; }
ICodeFirst CodeFirst { get; } ICodeFirst CodeFirst { get; }
IDbFirst DbFirst { get; } IDbFirst DbFirst { get; }
IDbMaintenance DbMaintenance { get; } IDbMaintenance DbMaintenance { get; }
EntityMaintenance EntityMaintenance { get; set; } EntityMaintenance EntityMaintenance { 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);
@@ -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>, 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>, List<T3>>> SaveQueuesAsync<T, T2, T3>(bool isTran = true);
Task<Tuple<List<T>, List<T2>>> SaveQueuesAsync<T, T2>(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 #endregion
#region Union #region Union

View File

@@ -410,6 +410,27 @@
<None Include="packages.config" /> <None Include="packages.config" />
<None Include="SqlSugar.nuspec" /> <None Include="SqlSugar.nuspec" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Abstract\AdoProvider\Abstract\AdoProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\AopProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\CacheProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\CodeFirstProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\DbBindProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\DbFirstProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\DbMaintenanceProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\DeleteProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\EntityMaintenance\" />
<Folder Include="Abstract\AdoProvider\Abstract\ExpressionableProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\FastestProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\FilterProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\InsertableProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\QueryableProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\Reportable\" />
<Folder Include="Abstract\AdoProvider\Abstract\SaveableProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\SqlBuilderProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\SugarProvider\" />
<Folder Include="Abstract\AdoProvider\Abstract\UpdateProvider\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@@ -321,7 +321,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>()
{ {

View File

@@ -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>();