Navigat query

This commit is contained in:
sunkaixuan 2022-04-12 00:27:34 +08:00
parent 4bf2d3fd96
commit 96e585fa4b
2 changed files with 14 additions and 12 deletions

View File

@ -78,6 +78,7 @@ namespace OrmTest
db.Insertable(new B1() { Id = 1, Name = "b1" }).ExecuteCommand(); db.Insertable(new B1() { Id = 1, Name = "b1" }).ExecuteCommand();
db.Insertable(new B1() { Id = 2, Name = "b2" }).ExecuteCommand(); db.Insertable(new B1() { Id = 2, Name = "b2" }).ExecuteCommand();
db.Insertable(new ABMapping1() { AId=1,BId=1 }).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(); db.Insertable(new ABMapping1() { AId = 2, BId = 2 }).ExecuteCommand();
var list3= db.Queryable<A1>().Includes(x => x.BList).ToList(); var list3= db.Queryable<A1>().Includes(x => x.BList).ToList();
} }
@ -86,6 +87,7 @@ namespace OrmTest
{ {
[SugarColumn(IsPrimaryKey = true )] [SugarColumn(IsPrimaryKey = true )]
public int AId { get; set; } public int AId { get; set; }
[SugarColumn(IsPrimaryKey = true)]
public int BId { get; set; } public int BId { get; set; }
} }
public class A1 public class A1

View File

@ -79,6 +79,7 @@ namespace SqlSugar
} }
else if (navObjectNameColumnInfo.Navigat.NavigatType == NavigatType.ManyToOne) else if (navObjectNameColumnInfo.Navigat.NavigatType == NavigatType.ManyToOne)
{ {
OneToOne(list, selector, listItemEntity, navObjectNamePropety, navObjectNameColumnInfo);
} }
else else
{ {
@ -90,7 +91,7 @@ namespace SqlSugar
{ {
var bEntity = navObjectNameColumnInfo.PropertyInfo.PropertyType.GetGenericArguments()[0]; var bEntity = navObjectNameColumnInfo.PropertyInfo.PropertyType.GetGenericArguments()[0];
var bEntityInfo = this.Context.EntityMaintenance.GetEntityInfo(bEntity); 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 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(); 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() conditionalModels2.Add((new ConditionalModel()
{ {
ConditionalType = ConditionalType.In, ConditionalType = ConditionalType.In,
FieldName = bPk.DbColumnName, FieldName = bPkColumn.DbColumnName,
FieldValue = String.Join(",", abids.Select(it => it.Bid).ToArray()), FieldValue = String.Join(",", abids.Select(it => it.Bid).ToArray()),
CSharpTypeName = bColumn.PropertyInfo.PropertyType.Name CSharpTypeName = bColumn.PropertyInfo.PropertyType.Name
})); }));
var navList = selector(this.Context.Queryable<object>().AS(bEntityInfo.DbTableName).Where(conditionalModels2)); var bList = selector(this.Context.Queryable<object>().AS(bEntityInfo.DbTableName).Where(conditionalModels2));
if (navList.HasValue()) if (bList.HasValue())
{ {
foreach (var item in list) foreach (var listItem in list)
{ {
var instance = Activator.CreateInstance(navObjectNamePropety.PropertyType, true); var instance = Activator.CreateInstance(navObjectNamePropety.PropertyType, true);
var ilist = instance as IList; var ilist = instance as IList;
foreach (var value in navList) foreach (var bInfo in bList)
{ {
var pk = listItemPkColumn.PropertyInfo.GetValue(item).ObjToString(); var pk = listItemPkColumn.PropertyInfo.GetValue(listItem).ObjToString();
if (abids.Any(x => x.Aid == pk)) 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(); ilist.Add(bInfo);
if (bids.Count()>0)
ilist.Add(value);
} }
} }
navObjectNamePropety.SetValue(item, instance); navObjectNamePropety.SetValue(listItem, instance);
} }
} }
} }