mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-07-15 14:04:44 +08:00
Update Join query
This commit is contained in:
parent
ab408238cc
commit
8c07a525dc
@ -942,9 +942,19 @@ namespace SqlSugar
|
||||
{
|
||||
this.QueryBuilder.AsTables[tableinfo.Key] = " (SELECT * FROM " + this.QueryBuilder.AsTables.First().Value + $" {SqlWith.NoLock} )";
|
||||
}
|
||||
else if (this.QueryBuilder.IsSqlQuery && this.QueryBuilder.AsTables.First().Value.ObjToString().StartsWith("("))
|
||||
{
|
||||
var tableName = this.QueryBuilder.AsTables.First().Value;
|
||||
this.QueryBuilder.AsTables[tableinfo.Key] = " (SELECT * FROM " + tableName + ")" + this.QueryBuilder.TableShortName;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.QueryBuilder.AsTables[tableinfo.Key] = " (SELECT * FROM " + this.QueryBuilder.AsTables.First().Value + ")";
|
||||
var tableName = this.QueryBuilder.AsTables.First().Value;
|
||||
if (tableName != null && Regex.IsMatch(tableName, @"^\w+$"))
|
||||
{
|
||||
tableName = SqlBuilder.GetTranslationTableName(tableName);
|
||||
}
|
||||
this.QueryBuilder.AsTables[tableinfo.Key] = " (SELECT * FROM " + tableName + ")";
|
||||
}
|
||||
this.QueryBuilder.SelectValue = this.QueryBuilder.TableShortName + ".*";
|
||||
}
|
||||
@ -1575,5 +1585,17 @@ namespace SqlSugar
|
||||
return this.Context.Ado.SqlQuery<Type>(sql,parameters);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Bool
|
||||
|
||||
private bool MasterHasWhereFirstJoin()
|
||||
{
|
||||
return this.QueryBuilder.JoinIndex == 0 &&
|
||||
this.QueryBuilder.IsSqlQuery == false &&
|
||||
!this.QueryBuilder.AsTables.Any() &&
|
||||
this.QueryBuilder.IsSingle() &&
|
||||
this.QueryBuilder.WhereInfos.Any();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -126,6 +126,11 @@ namespace SqlSugar
|
||||
}
|
||||
public ISugarQueryable<T, T2> FullJoin<T2>(Expression<Func<T, T2, bool>> joinExpression)
|
||||
{
|
||||
if (MasterHasWhereFirstJoin())
|
||||
{
|
||||
return this.MergeTable().FullJoin<T2>(joinExpression);
|
||||
}
|
||||
|
||||
this.Context.InitMappingInfo<T2>();
|
||||
var result = InstanceFactory.GetQueryable<T, T2>(this.Context.CurrentConnectionConfig);
|
||||
result.SqlBuilder = this.SqlBuilder;
|
||||
@ -135,6 +140,12 @@ namespace SqlSugar
|
||||
}
|
||||
public ISugarQueryable<T, T2> RightJoin<T2>(Expression<Func<T, T2, bool>> joinExpression)
|
||||
{
|
||||
|
||||
if (MasterHasWhereFirstJoin())
|
||||
{
|
||||
return this.MergeTable().RightJoin<T2>(joinExpression);
|
||||
}
|
||||
|
||||
this.Context.InitMappingInfo<T2>();
|
||||
var result = InstanceFactory.GetQueryable<T, T2>(this.Context.CurrentConnectionConfig);
|
||||
result.SqlBuilder = this.SqlBuilder;
|
||||
@ -143,8 +154,14 @@ namespace SqlSugar
|
||||
return result;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T, T2> InnerJoin<T2>(Expression<Func<T, T2, bool>> joinExpression)
|
||||
public ISugarQueryable<T, T2> InnerJoin<T2>(Expression<Func<T, T2, bool>> joinExpression)
|
||||
{
|
||||
|
||||
if (MasterHasWhereFirstJoin())
|
||||
{
|
||||
return this.MergeTable().InnerJoin<T2>(joinExpression);
|
||||
}
|
||||
|
||||
this.Context.InitMappingInfo<T2>();
|
||||
var result = InstanceFactory.GetQueryable<T, T2>(this.Context.CurrentConnectionConfig);
|
||||
result.SqlBuilder = this.SqlBuilder;
|
||||
@ -152,6 +169,7 @@ namespace SqlSugar
|
||||
result.QueryBuilder.JoinQueryInfos.Add(GetJoinInfo(joinExpression, JoinType.Inner));
|
||||
return result;
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
QueryBuilder.Clear();
|
||||
|
Loading…
Reference in New Issue
Block a user