From 1abf16f8171138cfbe1cf80cae81a164ea86c3f2 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Thu, 5 May 2022 09:13:59 +0800 Subject: [PATCH] Navigate.Dynamic multi-level BUG --- .../SqlServerTest/UnitTest/UintDynamic.cs | 7 +++++- .../QueryableProvider/MappingFieldsHelper.cs | 23 ++++++++++++++++--- .../QueryableProvider/NavigatManager.cs | 4 +++- .../QueryableProvider/QueryableProvider.cs | 4 ++-- Src/Asp.Net/SqlSugar/SqlSugar.csproj | 22 +----------------- 5 files changed, 32 insertions(+), 28 deletions(-) diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UintDynamic.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UintDynamic.cs index f1821f7f8..82f462e7d 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/UintDynamic.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/UintDynamic.cs @@ -14,7 +14,10 @@ namespace OrmTest var list=db.Queryable() .Includes(it => it.Books.Where(z=>z.BookId==1) .MappingField(z=>z.studenId,()=>it.StudentId) - .MappingField(z => z.BookId, () => it.StudentId).ToList()) + .MappingField(z => z.BookId, () => it.StudentId).ToList() + + , c=>c.bookChilds + .MappingField(z=>z.BookId,()=>c.BookId).ToList()) .ToList(); var list2 = db.Queryable().ToList(); @@ -58,6 +61,8 @@ namespace OrmTest [SugarColumn(ColumnName = "Name")] public string Names { get; set; } public int studenId { get; set; } + [Navigate(NavigateType.Dynamic,null)] + public List bookChilds { get; set; } } } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/MappingFieldsHelper.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/MappingFieldsHelper.cs index 3e6f7ba01..a5f915ecb 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/MappingFieldsHelper.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/MappingFieldsHelper.cs @@ -29,7 +29,7 @@ namespace SqlSugar return mappingFields; } - public List GetMppingSql(List list, List mappingFieldsExpressions) + public List GetMppingSql(List list, List mappingFieldsExpressions) { List conditionalModels = new List(); foreach (var model in list) @@ -141,9 +141,26 @@ namespace SqlSugar { item.LeftEntityColumn = this.NavEntity.Columns.FirstOrDefault(it => it.PropertyName == leftName); } - if (item.RightEntityColumn == null) + if (item.RightEntityColumn == null && this.Context != null) { - item.RightEntityColumn = this.RootEntity.Columns.FirstOrDefault(it => it.PropertyName == rightName); + if (item.RightColumnExpression is LambdaExpression) + { + var body=(item.RightColumnExpression as LambdaExpression).Body; + if (body is UnaryExpression) + { + body = ((UnaryExpression)body).Operand; + } + if (body is MemberExpression) + { + var exp=(body as MemberExpression).Expression; + if (exp.NodeType == ExpressionType.Parameter) + { + item.RightEntityColumn =this.Context.EntityMaintenance.GetEntityInfo(exp.Type).Columns.FirstOrDefault(it => it.PropertyName == rightName); + } + } + } + if (item.RightEntityColumn==null) + item.RightEntityColumn = this.RootEntity.Columns.FirstOrDefault(it => it.PropertyName == rightName); } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs index c5b11d47d..b41c19352 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs @@ -243,6 +243,7 @@ namespace SqlSugar if (sql.MappingExpressions.HasValue()) { MappingFieldsHelper helper = new MappingFieldsHelper(); + helper.Context = this.Context; helper.NavEntity = bEntityInfo; helper.RootEntity = this.Context.EntityMaintenance.GetEntityInfo(); helper.SetChildList(navObjectNameColumnInfo, listItem, ilist.Cast().ToList(), sql.MappingExpressions); @@ -319,6 +320,7 @@ namespace SqlSugar { MappingFieldsHelper helper = new MappingFieldsHelper(); helper.NavEntity = navEntityInfo; + helper.Context = this.Context; helper.RootEntity = this.Context.EntityMaintenance.GetEntityInfo(); helper.SetChildList(navObjectNameColumnInfo, item,setValue,sqlObj.MappingExpressions); } @@ -350,7 +352,7 @@ namespace SqlSugar helper.Context = this.Context; helper.NavEntity = navEntityInfo; helper.RootEntity = this.Context.EntityMaintenance.GetEntityInfo(); - var whereSql = helper.GetMppingSql(RootList,sqlObj.MappingExpressions); + var whereSql = helper.GetMppingSql(list, sqlObj.MappingExpressions); var navList = selector(this.Context.Queryable().AS(navEntityInfo.DbTableName).AddParameters(sqlObj.Parameters).Where(whereSql,true).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString)); if (navList.HasValue()) { diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index e2ce038a5..1a782b08d 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -1448,7 +1448,7 @@ namespace SqlSugar RightEntityColumn=rightEntity.Columns.First(it=>it.PropertyName==ExpressionTool.GetMemberName(mappingFiled2)) } }; - var conditionals=fieldsHelper.GetMppingSql(list, mappings); + var conditionals=fieldsHelper.GetMppingSql(list.Cast().ToList(), mappings); if (queryableContext.TempChildLists == null) queryableContext.TempChildLists = new Dictionary(); if (list != null && queryableContext.TempChildLists.ContainsKey(key)) @@ -1542,7 +1542,7 @@ namespace SqlSugar RightEntityColumn=rightEntity.Columns.First(it=>it.PropertyName==ExpressionTool.GetMemberName(mappingFiled2)) } }; - var conditionals = fieldsHelper.GetMppingSql(list, mappings); + var conditionals = fieldsHelper.GetMppingSql(list.Cast().ToList(), mappings); if (queryableContext.TempChildLists == null) queryableContext.TempChildLists = new Dictionary(); if (list != null && queryableContext.TempChildLists.ContainsKey(key)) diff --git a/Src/Asp.Net/SqlSugar/SqlSugar.csproj b/Src/Asp.Net/SqlSugar/SqlSugar.csproj index 1be5bb720..807776160 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugar.csproj +++ b/Src/Asp.Net/SqlSugar/SqlSugar.csproj @@ -431,27 +431,7 @@ - - - - - - - - - - - - - - - - - - - - - +