diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/MappingFieldsHelper.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/MappingFieldsHelper.cs index 3e6f7ba01..a5f915ecb 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/MappingFieldsHelper.cs +++ b/Src/Asp.NetCore2/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.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs index c5b11d47d..b41c19352 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs +++ b/Src/Asp.NetCore2/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.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index e2ce038a5..1a782b08d 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/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))