From 96e585fa4bf6b61d882e86b4cb94de2b2e6b1b6f Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Tue, 12 Apr 2022 00:27:34 +0800 Subject: [PATCH] Navigat query --- .../SqlServerTest/UnitTest/UCustom012.cs | 2 ++ .../QueryableProvider/NavigatManager.cs | 24 +++++++++---------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs index da770526e..9675ab538 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/UCustom012.cs @@ -78,6 +78,7 @@ namespace OrmTest db.Insertable(new B1() { Id = 1, Name = "b1" }).ExecuteCommand(); db.Insertable(new B1() { Id = 2, Name = "b2" }).ExecuteCommand(); db.Insertable(new ABMapping1() { AId=1,BId=1 }).ExecuteCommand(); + db.Insertable(new ABMapping1() { AId =2, BId = 1 }).ExecuteCommand(); db.Insertable(new ABMapping1() { AId = 2, BId = 2 }).ExecuteCommand(); var list3= db.Queryable().Includes(x => x.BList).ToList(); } @@ -86,6 +87,7 @@ namespace OrmTest { [SugarColumn(IsPrimaryKey = true )] public int AId { get; set; } + [SugarColumn(IsPrimaryKey = true)] public int BId { get; set; } } public class A1 diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs index 52918d1e0..aaece9d54 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs @@ -79,6 +79,7 @@ namespace SqlSugar } else if (navObjectNameColumnInfo.Navigat.NavigatType == NavigatType.ManyToOne) { + OneToOne(list, selector, listItemEntity, navObjectNamePropety, navObjectNameColumnInfo); } else { @@ -90,7 +91,7 @@ namespace SqlSugar { var bEntity = navObjectNameColumnInfo.PropertyInfo.PropertyType.GetGenericArguments()[0]; var bEntityInfo = this.Context.EntityMaintenance.GetEntityInfo(bEntity); - var bPk = bEntityInfo.Columns.FirstOrDefault(it => it.IsPrimarykey); + var bPkColumn = bEntityInfo.Columns.FirstOrDefault(it => it.IsPrimarykey); var listItemPkColumn = listItemEntity.Columns.Where(it => it.IsPrimarykey).FirstOrDefault(); var ids = list.Select(it => it.GetType().GetProperty(listItemPkColumn.PropertyName).GetValue(it)).Select(it => it == null ? "null" : it).Distinct().ToList(); @@ -111,29 +112,28 @@ namespace SqlSugar conditionalModels2.Add((new ConditionalModel() { ConditionalType = ConditionalType.In, - FieldName = bPk.DbColumnName, + FieldName = bPkColumn.DbColumnName, 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)); - if (navList.HasValue()) + var bList = selector(this.Context.Queryable().AS(bEntityInfo.DbTableName).Where(conditionalModels2)); + if (bList.HasValue()) { - foreach (var item in list) + foreach (var listItem in list) { var instance = Activator.CreateInstance(navObjectNamePropety.PropertyType, true); var ilist = instance as IList; - foreach (var value in navList) + foreach (var bInfo in bList) { - var pk = listItemPkColumn.PropertyInfo.GetValue(item).ObjToString(); - if (abids.Any(x => x.Aid == pk)) + var pk = listItemPkColumn.PropertyInfo.GetValue(listItem).ObjToString(); + var bid = bPkColumn.PropertyInfo.GetValue(bInfo).ObjToString(); + if (abids.Any(x => x.Aid == pk&& x.Bid== bid)) { - var bids = abids.Where(x => x.Aid == pk).ToList(); - if (bids.Count()>0) - ilist.Add(value); + ilist.Add(bInfo); } } - navObjectNamePropety.SetValue(item, instance); + navObjectNamePropety.SetValue(listItem, instance); } } }