diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ExpressionContext.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ExpressionContext.cs index de83272e1..6bc8915fa 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ExpressionContext.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ExpressionContext.cs @@ -37,7 +37,8 @@ namespace SqlSugar } } public int SubQueryIndex { get; set; } - public int JoinIndex { get; set; } + public int JoinIndex { get; set; } + public bool IsAsAttr { get; set; } public int Index { get; set; } public int ParameterIndex { get; set; } public string SingleTableNameSubqueryShortName{ get; set; } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubInnerJoin.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubInnerJoin.cs index 868438005..f4ca63ec7 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubInnerJoin.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubInnerJoin.cs @@ -51,6 +51,13 @@ namespace SqlSugar } this.Context.RefreshMapping(); var tableName= Context.GetTranslationTableName(parameter.Type.Name, true); + if (this.Context.IsAsAttr == true) + { + var db = this.Context.SugarContext.Context; + var entityInfo = db.EntityMaintenance.GetEntityInfo(parameter.Type); + var queryable = ((QueryableProvider)(db.Queryable())); + tableName = queryable.GetTableName(entityInfo, tableName); + } if (exp.Arguments.Count == 2 && exp.Arguments.Last().HasValue()) { tableName = Context.GetTranslationTableName(ExpressionTool.DynamicInvoke(exp.Arguments.Last()) + ""); diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubLeftJoin.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubLeftJoin.cs index 626c6a422..5d8980329 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubLeftJoin.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubLeftJoin.cs @@ -51,6 +51,13 @@ namespace SqlSugar } this.Context.RefreshMapping(); var tableName= Context.GetTranslationTableName(parameter.Type.Name, true); + if (this.Context.IsAsAttr == true) + { + var db = this.Context.SugarContext.Context; + var entityInfo = db.EntityMaintenance.GetEntityInfo(parameter.Type); + var queryable = ((QueryableProvider)(db.Queryable())); + tableName = queryable.GetTableName(entityInfo, tableName); + } if (exp.Arguments.Count == 2 && exp.Arguments.Last().HasValue()) { tableName=Context.GetTranslationTableName(ExpressionTool.DynamicInvoke(exp.Arguments.Last())+""); diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs index d09426ab5..58e2cdccb 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/SubResolve.cs @@ -20,6 +20,7 @@ namespace SqlSugar private string subKey = "$SubAs:"; private bool hasWhere; private bool isXmlPath = false; + private bool isAsAttr = false; public SubResolve(MethodCallExpression expression, ExpressionContext context, Expression oppsiteExpression) { this.context = context; @@ -234,6 +235,10 @@ namespace SqlSugar { isXmlPath = true; } + else if (item is SubAsWithAttr) + { + isAsAttr = true; + } item.Context = this.context; item.Expression = exp; @@ -269,12 +274,17 @@ namespace SqlSugar { this.context.JoinIndex++; } + if (isAsAttr) + { + this.context.IsAsAttr = true; + } List result = isubList.Select(it => { it.HasWhere = isHasWhere; return it.GetValue(it.Expression); }).ToList(); this.context.JoinIndex = 0; + this.context.IsAsAttr = false; return result; }