diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs index 2b2b40759..d15e0508c 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs @@ -83,6 +83,10 @@ namespace OrmTest .Where(it => it.SchoolA.TeacherList.Any()) .ToList(); + var list3333 = db.Queryable() + .Includes(it => it.SchoolA, it => it.TeacherList) + .Where(it => it.SchoolA.TeacherList.Any(z=>z.Id>2)) + .ToList(); var list3 = db.Queryable() .Includes(x => x.SchoolA, x => x.RoomList)//2个参数就是 then Include diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/OneToManyNavgateExpressionN.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/OneToManyNavgateExpressionN.cs index ccda4491a..6fbecb217 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/OneToManyNavgateExpressionN.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/OneToManyNavgateExpressionN.cs @@ -110,14 +110,14 @@ namespace SqlSugar foreach (var item in joinInfos) { var shortName = item.ThisEntityInfo.DbTableName + i; - EntityColumnInfo pkColumn ; - EntityColumnInfo navColum ; + EntityColumnInfo pkColumn; + EntityColumnInfo navColum; if (index == 0) { pkColumn = item.ThisEntityInfo.Columns.FirstOrDefault(it => it.PropertyName == item.Nav.Name); navColum = item.ParentEntityInfo.Columns.FirstOrDefault(it => it.IsPrimarykey); } - else + else { pkColumn = item.ThisEntityInfo.Columns.FirstOrDefault(it => it.IsPrimarykey); navColum = item.ParentEntityInfo.Columns.FirstOrDefault(it => it.PropertyName == item.Nav.Name); @@ -137,6 +137,7 @@ namespace SqlSugar var PkColumn = last.ParentEntityInfo.Columns.FirstOrDefault(it => it.PropertyName == last.Nav.Name); Check.ExceptionEasy(PkColumn == null, $"{ last.ParentEntityInfo.EntityName} no found {last.Nav.Name}", $"{ last.ParentEntityInfo.EntityName} 不存在 {last.Nav.Name}"); queryable.Where($" {this.shorName}.{ queryable.SqlBuilder.GetTranslationColumnName(PkColumn.DbColumnName)} = {masterShortName}.{queryable.SqlBuilder.GetTranslationColumnName(FirstPkColumn.DbColumnName)} "); + queryable.WhereIF(this.whereSql.HasValue(), GetWhereSql1(this.whereSql,lastShortName, joinInfos, queryable.SqlBuilder)); MapperSql.Sql = $"( {queryable.ToSql().Key} ) "; if ((memberInfo.Expression as MethodCallExpression).Method.Name == "Any") { @@ -146,7 +147,21 @@ namespace SqlSugar return MapperSql; } + #region Helper + private string GetWhereSql1(string wheresql,string lastShortName, List joinInfos,ISqlBuilder sqlBuilder) + { + var sql = wheresql; + if (sql == null) return sql; + joinInfos.Last().ThisEntityInfo.Columns.ForEach(it => + { + this.whereSql = this.whereSql.Replace(sqlBuilder.GetTranslationColumnName(it.DbColumnName), + lastShortName+"." + sqlBuilder.GetTranslationColumnName(it.DbColumnName)); + + }); + return sql; + } + private string GetWhereSql(MethodCallExpression memberExp) { var whereExp = memberExp.Arguments[1];