From 91d95c358ab31fac6512b5cfbe230144ccc88fc3 Mon Sep 17 00:00:00 2001 From: liuchao Date: Wed, 12 Oct 2022 01:23:09 +0800 Subject: [PATCH] update ToChildList : support include root self --- .../QueryableProvider/QueryableProvider.cs | 66 ++++++------------- .../QueryableProvider/QueryableProvider.cs | 62 +++++------------ 2 files changed, 38 insertions(+), 90 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 7d0f14a00..4ebdb92cd 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -1358,57 +1358,19 @@ namespace SqlSugar var list= this.ToPivotList(columnSelector, rowSelector, dataSelector); return this.Context.Utilities.SerializeObject(list); } - public List ToChildList(Expression> parentIdExpression, object primaryKeyValue,bool isContainOneself = true) + public List ToChildList(Expression> parentIdExpression, object primaryKeyValue, bool isContainOneself = true) { var entity = this.Context.EntityMaintenance.GetEntityInfo(); var pk = GetTreeKey(entity); var list = this.ToList(); - if (isContainOneself) - { - var result= GetChildList(parentIdExpression, pk, list, primaryKeyValue); - var pkDb = this.Context.EntityMaintenance.GetEntityInfo().Columns.FirstOrDefault(z=>z.PropertyName==pk); - var pkDbName = pk; - if (pkDb != null) - { - pkDbName = pkDb.DbColumnName; - } - var addItem = this.Context.Queryable().In(pkDbName, primaryKeyValue).First(); - if (addItem != null) - { - result.Add(addItem); - } - return result; - } - else - { - return GetChildList(parentIdExpression, pk, list, primaryKeyValue); - } + return GetChildList(parentIdExpression, pk, list, primaryKeyValue, isContainOneself); } - public async Task> ToChildListAsync(Expression> parentIdExpression, object primaryKeyValue,bool isContainOneself=true) + public async Task> ToChildListAsync(Expression> parentIdExpression, object primaryKeyValue, bool isContainOneself=true) { var entity = this.Context.EntityMaintenance.GetEntityInfo(); var pk = GetTreeKey(entity); var list = await this.ToListAsync(); - if (isContainOneself) - { - var result = GetChildList(parentIdExpression, pk, list, primaryKeyValue); - var pkDb = this.Context.EntityMaintenance.GetEntityInfo().Columns.FirstOrDefault(z => z.PropertyName == pk); - var pkDbName = pk; - if (pkDb != null) - { - pkDbName = pkDb.DbColumnName; - } - var addItem =await this.Context.Queryable().In(pkDbName, primaryKeyValue).FirstAsync(); - if (addItem != null) - { - result.Add(addItem); - } - return result; - } - else - { - return GetChildList(parentIdExpression, pk, list, primaryKeyValue); - } + return GetChildList(parentIdExpression, pk, list, primaryKeyValue, isContainOneself); } public List ToParentList(Expression> parentIdExpression, object primaryKeyValue) { @@ -2475,7 +2437,7 @@ namespace SqlSugar RestoreMapping(); return new KeyValuePair>(sql, QueryBuilder.Parameters); } - private List GetChildList(Expression> parentIdExpression, string pkName, List list, object rootValue,bool isRoot=true) + private List GetChildList(Expression> parentIdExpression, string pkName, List list, object rootValue, bool isContainOneself) { var exp = (parentIdExpression as LambdaExpression).Body; if (exp is UnaryExpression) @@ -2483,11 +2445,11 @@ namespace SqlSugar exp = (exp as UnaryExpression).Operand; } var parentIdName = (exp as MemberExpression).Member.Name; - var result = BuildChildList(list, pkName, parentIdName, rootValue); + var result = BuildChildList(list, pkName, parentIdName, rootValue, isContainOneself); return result; } - private static List BuildChildList(List list, string idName, string pIdName, object rootValue) + private static List BuildChildList(List list, string idName, string pIdName, object rootValue, bool isContainOneself) { var type = typeof(T); var idProp = type.GetProperty(idName); @@ -2511,7 +2473,19 @@ namespace SqlSugar return finalList; }; - return fc(rootValue.ObjToString()); + var result = new List(); + result = fc(rootValue.ObjToString()); + + if (isContainOneself) + { + var root = kvpList.FirstOrDefault(x => x.Value == rootValue.ObjToString()).Key; + if (root != null) + { + result.Insert(0, root); + } + } + + return result; } private List GetTreeRoot(Expression>> childListExpression, Expression> parentIdExpression, string pk, List list,object rootValue) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 7d0f14a00..d17d76ab5 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -1363,52 +1363,14 @@ namespace SqlSugar var entity = this.Context.EntityMaintenance.GetEntityInfo(); var pk = GetTreeKey(entity); var list = this.ToList(); - if (isContainOneself) - { - var result= GetChildList(parentIdExpression, pk, list, primaryKeyValue); - var pkDb = this.Context.EntityMaintenance.GetEntityInfo().Columns.FirstOrDefault(z=>z.PropertyName==pk); - var pkDbName = pk; - if (pkDb != null) - { - pkDbName = pkDb.DbColumnName; - } - var addItem = this.Context.Queryable().In(pkDbName, primaryKeyValue).First(); - if (addItem != null) - { - result.Add(addItem); - } - return result; - } - else - { - return GetChildList(parentIdExpression, pk, list, primaryKeyValue); - } + return GetChildList(parentIdExpression, pk, list, primaryKeyValue, isContainOneself); } public async Task> ToChildListAsync(Expression> parentIdExpression, object primaryKeyValue,bool isContainOneself=true) { var entity = this.Context.EntityMaintenance.GetEntityInfo(); var pk = GetTreeKey(entity); var list = await this.ToListAsync(); - if (isContainOneself) - { - var result = GetChildList(parentIdExpression, pk, list, primaryKeyValue); - var pkDb = this.Context.EntityMaintenance.GetEntityInfo().Columns.FirstOrDefault(z => z.PropertyName == pk); - var pkDbName = pk; - if (pkDb != null) - { - pkDbName = pkDb.DbColumnName; - } - var addItem =await this.Context.Queryable().In(pkDbName, primaryKeyValue).FirstAsync(); - if (addItem != null) - { - result.Add(addItem); - } - return result; - } - else - { - return GetChildList(parentIdExpression, pk, list, primaryKeyValue); - } + return GetChildList(parentIdExpression, pk, list, primaryKeyValue, isContainOneself); } public List ToParentList(Expression> parentIdExpression, object primaryKeyValue) { @@ -2475,7 +2437,7 @@ namespace SqlSugar RestoreMapping(); return new KeyValuePair>(sql, QueryBuilder.Parameters); } - private List GetChildList(Expression> parentIdExpression, string pkName, List list, object rootValue,bool isRoot=true) + private List GetChildList(Expression> parentIdExpression, string pkName, List list, object rootValue, bool isContainOneself) { var exp = (parentIdExpression as LambdaExpression).Body; if (exp is UnaryExpression) @@ -2483,11 +2445,11 @@ namespace SqlSugar exp = (exp as UnaryExpression).Operand; } var parentIdName = (exp as MemberExpression).Member.Name; - var result = BuildChildList(list, pkName, parentIdName, rootValue); + var result = BuildChildList(list, pkName, parentIdName, rootValue, isContainOneself); return result; } - private static List BuildChildList(List list, string idName, string pIdName, object rootValue) + private static List BuildChildList(List list, string idName, string pIdName, object rootValue, bool isContainOneself) { var type = typeof(T); var idProp = type.GetProperty(idName); @@ -2511,7 +2473,19 @@ namespace SqlSugar return finalList; }; - return fc(rootValue.ObjToString()); + var result = new List(); + result = fc(rootValue.ObjToString()); + + if (isContainOneself) + { + var root = kvpList.FirstOrDefault(x => x.Value == rootValue.ObjToString()).Key; + if (root != null) + { + result.Insert(0, root); + } + } + + return result; } private List GetTreeRoot(Expression>> childListExpression, Expression> parentIdExpression, string pk, List list,object rootValue)