diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs index 3b6814772..52918d1e0 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs @@ -39,16 +39,16 @@ namespace SqlSugar private void ExecuteByLay(int i, Expression item) { - + if (i == 1) { ExecuteByLay(item, RootList.Select(it => it as object).ToList(), SelectR1); } - else if(i == 2) + else if (i == 2) { var memberExpression = ((_preExpressionList.Last() as LambdaExpression).Body as MemberExpression); var navObjectName = memberExpression.Member.Name; - var list = RootList.Select(it =>(it.GetType().GetProperty(navObjectName).GetValue(it))).ToList(); + var list = RootList.Select(it => (it.GetType().GetProperty(navObjectName).GetValue(it))).ToList(); ExecuteByLay(item, list, SelectR2); } _preExpressionList.Add(item); @@ -103,16 +103,16 @@ namespace SqlSugar ConditionalType = ConditionalType.In, FieldName = aColumn.DbColumnName, FieldValue = String.Join(",", ids), - CSharpTypeName = bColumn.PropertyInfo.PropertyType.Name + CSharpTypeName = aColumn.PropertyInfo.PropertyType.Name })); - var bids=this.Context.Queryable().AS(mappingEntity.DbTableName).Where(conditionalModels).Select(bColumn.DbColumnName).ToList(); + var abids = this.Context.Queryable().AS(mappingEntity.DbTableName).Where(conditionalModels).Select($"{aColumn.DbColumnName} as aid,{bColumn.DbColumnName} as bid").ToList(); List conditionalModels2 = new List(); conditionalModels2.Add((new ConditionalModel() { ConditionalType = ConditionalType.In, FieldName = bPk.DbColumnName, - FieldValue = String.Join(",", bids), + FieldValue = String.Join(",", abids.Select(it => it.Bid).ToArray()), CSharpTypeName = bColumn.PropertyInfo.PropertyType.Name })); var navList = selector(this.Context.Queryable().AS(bEntityInfo.DbTableName).Where(conditionalModels2)); @@ -120,12 +120,18 @@ namespace SqlSugar { foreach (var item in list) { - + var instance = Activator.CreateInstance(navObjectNamePropety.PropertyType, true); var ilist = instance as IList; foreach (var value in navList) { - ilist.Add(value); + var pk = listItemPkColumn.PropertyInfo.GetValue(item).ObjToString(); + if (abids.Any(x => x.Aid == pk)) + { + var bids = abids.Where(x => x.Aid == pk).ToList(); + if (bids.Count()>0) + ilist.Add(value); + } } navObjectNamePropety.SetValue(item, instance); } diff --git a/Src/Asp.Net/SqlSugar/Entities/SugarAbMapping.cs b/Src/Asp.Net/SqlSugar/Entities/SugarAbMapping.cs new file mode 100644 index 000000000..cc1df0138 --- /dev/null +++ b/Src/Asp.Net/SqlSugar/Entities/SugarAbMapping.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class SugarAbMapping + { + public string Aid { get; set; } + public string Bid { get; set; } + } +} diff --git a/Src/Asp.Net/SqlSugar/SqlSugar.csproj b/Src/Asp.Net/SqlSugar/SqlSugar.csproj index dde1f6f82..573d47e19 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugar.csproj +++ b/Src/Asp.Net/SqlSugar/SqlSugar.csproj @@ -99,6 +99,7 @@ +