SqlQueryable functionality is optimized

This commit is contained in:
sunkaixuna 2021-08-05 20:26:18 +08:00
parent 587d69d41d
commit c60a4c3563
9 changed files with 23 additions and 4 deletions

View File

@ -2419,6 +2419,7 @@ namespace SqlSugar
asyncQueryableBuilder.AsTables = this.Context.Utilities.TranslateCopy(this.QueryBuilder.AsTables);
asyncQueryableBuilder.DisableTop = this.QueryBuilder.DisableTop;
asyncQueryableBuilder.Offset = this.QueryBuilder.Offset;
asyncQueryableBuilder.IsSqlQuery = this.QueryBuilder.IsSqlQuery;
}
protected int SetCacheTime(int cacheDurationInSeconds)
{

View File

@ -35,6 +35,7 @@ namespace SqlSugar
#region Splicing basic
public List<string> IgnoreColumns { get; set; }
public bool IsCount { get; set; }
public bool IsSqlQuery { get; set; }
public int? Skip { get; set; }
public int ExternalPageIndex { get; set; }
public int ExternalPageSize { get; set; }
@ -475,6 +476,15 @@ namespace SqlSugar
{
return Regex.IsMatch(sql, @"AS \[\w+\.\w+\]");
}
public string GetSqlQuerySql(string result)
{
if (this.IsSqlQuery && (Skip == null && Take == null))
{
result = System.Text.RegularExpressions.Regex.Match(result, @"^SELECT t\.\* FROM \((.*)\) t $").Groups[1].Value;
}
return result;
}
#endregion
#region Get SQL Partial

View File

@ -578,7 +578,9 @@ namespace SqlSugar
public ISugarQueryable<T> SqlQueryable<T>(string sql) where T : class, new()
{
var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig);
return this.Context.Queryable<T>().AS(sqlBuilder.GetPackTable(sql, sqlBuilder.GetDefaultShortName())).With(SqlWith.Null).Select(sqlBuilder.GetDefaultShortName() + ".*");
var result= this.Context.Queryable<T>().AS(sqlBuilder.GetPackTable(sql, sqlBuilder.GetDefaultShortName())).With(SqlWith.Null).Select(sqlBuilder.GetDefaultShortName() + ".*");
result.QueryBuilder.IsSqlQuery = true;
return result;
}
#endregion

View File

@ -48,6 +48,7 @@ namespace SqlSugar
result = ToPageSql2(result, ExternalPageIndex, ExternalPageSize, true);
}
this.OrderByValue = oldOrderBy;
result = GetSqlQuerySql(result);
return result;
}
public override string ToPageSql(string sql, int? take, int? skip, bool isExternal = false)

View File

@ -61,6 +61,7 @@ namespace SqlSugar
result = sql.ToString();
}
this.OrderByValue = oldOrderValue;
result = GetSqlQuerySql(result);
return result;
}
private string ToCountSqlString()

View File

@ -51,6 +51,7 @@ namespace SqlSugar
result = ToPageSql2(result, ExternalPageIndex, ExternalPageSize, true);
}
this.OrderByValue = oldOrderBy;
result = GetSqlQuerySql(result);
return result;
}
public override string ToPageSql(string sql, int? take, int? skip, bool isExternal = false)

View File

@ -61,6 +61,7 @@ namespace SqlSugar
result = sql.ToString();
}
this.OrderByValue = oldOrderValue;
result = GetSqlQuerySql(result);
return result;
}

View File

@ -28,7 +28,7 @@ namespace SqlSugar
{
this.OrderByValue = this.PartitionByValue + this.OrderByValue;
}
var isFirst = (Skip == 0 || Skip == null) && Take == 1&&DisableTop==false;
var isFirst = (Skip == 0 || Skip == null) && Take == 1 && DisableTop == false;
var isRowNumber = (Skip != null || Take != null) && !isFirst;
var rowNumberString = string.Format(",ROW_NUMBER() OVER({0}) AS RowIndex ", GetOrderByString);
string groupByValue = GetGroupByString + HavingInfos;
@ -48,14 +48,15 @@ namespace SqlSugar
result = ToPageSql2(result, ExternalPageIndex, ExternalPageSize, true);
}
this.OrderByValue = oldOrderBy;
if (!string.IsNullOrEmpty(this.Offset))
if (!string.IsNullOrEmpty(this.Offset))
{
if (this.OrderByValue.IsNullOrEmpty())
if (this.OrderByValue.IsNullOrEmpty())
{
result += " ORDER BY GETDATE() ";
}
result += this.Offset;
}
result = GetSqlQuerySql(result);
return result;
}
}

View File

@ -61,6 +61,7 @@ namespace SqlSugar
result= sql.ToString();
}
this.OrderByValue = oldOrderBy;
result = GetSqlQuerySql(result);
return result;
}