mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-24 04:53:45 +08:00
Update AppendSelect
This commit is contained in:
@@ -884,11 +884,17 @@ namespace SqlSugar
|
|||||||
#region Other
|
#region Other
|
||||||
protected string AppendSelect(List<EntityColumnInfo> entityColumnInfos,string sql, ReadOnlyCollection<ParameterExpression> parameters, List<EntityColumnInfo> columnsResult, int parameterIndex1)
|
protected string AppendSelect(List<EntityColumnInfo> entityColumnInfos,string sql, ReadOnlyCollection<ParameterExpression> parameters, List<EntityColumnInfo> columnsResult, int parameterIndex1)
|
||||||
{
|
{
|
||||||
|
var lowerSql = sql.ToLower();
|
||||||
|
var isSubquery = lowerSql.Contains("select ") && ExpressionTool.IsMemberInit(this.QueryBuilder.SelectValue);
|
||||||
|
if (isSubquery)
|
||||||
|
{
|
||||||
|
return AppendSelectWithSubQuery(entityColumnInfos, sql, parameters, columnsResult, parameterIndex1);
|
||||||
|
}
|
||||||
var columns = entityColumnInfos;
|
var columns = entityColumnInfos;
|
||||||
var parameterName = parameters[parameterIndex1];
|
var parameterName = parameters[parameterIndex1];
|
||||||
foreach (var item in columns)
|
foreach (var item in columns)
|
||||||
{
|
{
|
||||||
if (item.IsIgnore == false && columnsResult.Any(it => it.PropertyName.EqualCase(item.PropertyName)) && !sql.ToLower().Contains(SqlBuilder.GetTranslationColumnName(item.PropertyName.ToLower())))
|
if (item.IsIgnore == false && columnsResult.Any(it => it.PropertyName.EqualCase(item.PropertyName)) && !lowerSql.Contains(SqlBuilder.GetTranslationColumnName(item.PropertyName.ToLower())))
|
||||||
{
|
{
|
||||||
sql = $" {sql},{SqlBuilder.GetTranslationColumnName(item.DbColumnName)} AS {SqlBuilder.GetTranslationColumnName(item.PropertyName)} ";
|
sql = $" {sql},{SqlBuilder.GetTranslationColumnName(item.DbColumnName)} AS {SqlBuilder.GetTranslationColumnName(item.PropertyName)} ";
|
||||||
}
|
}
|
||||||
@@ -896,6 +902,28 @@ namespace SqlSugar
|
|||||||
|
|
||||||
return sql;
|
return sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string AppendSelectWithSubQuery(List<EntityColumnInfo> entityColumnInfos, string sql, ReadOnlyCollection<ParameterExpression> parameters, List<EntityColumnInfo> columnsResult, int parameterIndex1)
|
||||||
|
{
|
||||||
|
var list = ExpressionTool.GetMemberInit(this.QueryBuilder.SelectValue).Bindings.Cast<MemberBinding>()
|
||||||
|
.Select(it => it.Member.Name).ToList();
|
||||||
|
var columns = entityColumnInfos;
|
||||||
|
var parameterName = parameters[parameterIndex1];
|
||||||
|
if (this.QueryBuilder.AutoAppendedColumns == null)
|
||||||
|
{
|
||||||
|
this.QueryBuilder.AutoAppendedColumns = new List<string>();
|
||||||
|
}
|
||||||
|
foreach (var item in columns)
|
||||||
|
{
|
||||||
|
if (item.IsIgnore == false &&!this.QueryBuilder.AutoAppendedColumns.Contains(item.PropertyName)&& columnsResult.Any(it => it.PropertyName.EqualCase(item.PropertyName))&& !list.Any(it=>it.EqualCase(item.PropertyName)))
|
||||||
|
{
|
||||||
|
sql = $" {sql},{SqlBuilder.GetTranslationColumnName(item.DbColumnName)} AS {SqlBuilder.GetTranslationColumnName(item.PropertyName)} ";
|
||||||
|
this.QueryBuilder.AutoAppendedColumns.Add(item.PropertyName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sql;
|
||||||
|
}
|
||||||
|
|
||||||
protected string AppendSelect<EntityType>(string sql, ReadOnlyCollection<ParameterExpression> parameters, List<EntityColumnInfo> columnsResult, int parameterIndex1)
|
protected string AppendSelect<EntityType>(string sql, ReadOnlyCollection<ParameterExpression> parameters, List<EntityColumnInfo> columnsResult, int parameterIndex1)
|
||||||
{
|
{
|
||||||
var columns = this.Context.EntityMaintenance.GetEntityInfo<EntityType>().Columns;
|
var columns = this.Context.EntityMaintenance.GetEntityInfo<EntityType>().Columns;
|
||||||
|
@@ -851,6 +851,7 @@ namespace SqlSugar
|
|||||||
internal bool IsClone { get; set; }
|
internal bool IsClone { get; set; }
|
||||||
public bool NoCheckInclude { get; set; }
|
public bool NoCheckInclude { get; set; }
|
||||||
public virtual bool IsSelectNoAll { get; set; } = false;
|
public virtual bool IsSelectNoAll { get; set; } = false;
|
||||||
|
public List<string> AutoAppendedColumns { get; set; }
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private string GetTableName(string entityName)
|
private string GetTableName(string entityName)
|
||||||
|
@@ -575,5 +575,47 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static bool IsMemberInit(object selectValue)
|
||||||
|
{
|
||||||
|
var result = false;
|
||||||
|
if (selectValue is Expression)
|
||||||
|
{
|
||||||
|
if (selectValue is MemberInitExpression)
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
else if (selectValue is LambdaExpression)
|
||||||
|
{
|
||||||
|
var lambda = (LambdaExpression)selectValue;
|
||||||
|
if (lambda.Body is MemberInitExpression)
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static MemberInitExpression GetMemberInit(object selectValue)
|
||||||
|
{
|
||||||
|
MemberInitExpression result = null;
|
||||||
|
if (selectValue is Expression)
|
||||||
|
{
|
||||||
|
if (selectValue is MemberInitExpression)
|
||||||
|
{
|
||||||
|
result = (MemberInitExpression)selectValue;
|
||||||
|
}
|
||||||
|
else if (selectValue is LambdaExpression)
|
||||||
|
{
|
||||||
|
var lambda = (LambdaExpression)selectValue;
|
||||||
|
if (lambda.Body is MemberInitExpression)
|
||||||
|
{
|
||||||
|
result = (MemberInitExpression)lambda.Body;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user