mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-20 02:29:39 +08:00
Merge pull request #1084 from chuck2leo/optimize-tochildlist-includeself
Optimize tochildlist includeself
This commit is contained in:
@@ -1358,53 +1358,19 @@ namespace SqlSugar
|
|||||||
var list= this.ToPivotList(columnSelector, rowSelector, dataSelector);
|
var list= this.ToPivotList(columnSelector, rowSelector, dataSelector);
|
||||||
return this.Context.Utilities.SerializeObject(list);
|
return this.Context.Utilities.SerializeObject(list);
|
||||||
}
|
}
|
||||||
public List<T> ToChildList(Expression<Func<T, object>> parentIdExpression, object primaryKeyValue,bool isContainOneself = true)
|
public List<T> ToChildList(Expression<Func<T, object>> parentIdExpression, object primaryKeyValue, bool isContainOneself = true)
|
||||||
{
|
{
|
||||||
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
|
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
|
||||||
var pk = GetTreeKey(entity);
|
var pk = GetTreeKey(entity);
|
||||||
var list = this.ToList();
|
var list = this.ToList();
|
||||||
if (isContainOneself)
|
return GetChildList(parentIdExpression, pk, list, primaryKeyValue, isContainOneself);
|
||||||
{
|
|
||||||
var result= GetChildList(parentIdExpression, pk, list, primaryKeyValue);
|
|
||||||
var pkDb = this.Context.EntityMaintenance.GetEntityInfo<T>().Columns.FirstOrDefault(z=>z.PropertyName==pk);
|
|
||||||
if (pkDb != null)
|
|
||||||
{
|
|
||||||
var addItem = list.Where(z => pkDb.PropertyInfo.GetValue(z, null).Equals(primaryKeyValue)).FirstOrDefault();
|
|
||||||
if (addItem != null)
|
|
||||||
{
|
|
||||||
result.Add(addItem);
|
|
||||||
}
|
}
|
||||||
}
|
public async Task<List<T>> ToChildListAsync(Expression<Func<T, object>> parentIdExpression, object primaryKeyValue, bool isContainOneself=true)
|
||||||
return result;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return GetChildList(parentIdExpression, pk, list, primaryKeyValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public async Task<List<T>> ToChildListAsync(Expression<Func<T, object>> parentIdExpression, object primaryKeyValue,bool isContainOneself=true)
|
|
||||||
{
|
{
|
||||||
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
|
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
|
||||||
var pk = GetTreeKey(entity);
|
var pk = GetTreeKey(entity);
|
||||||
var list = await this.ToListAsync();
|
var list = await this.ToListAsync();
|
||||||
if (isContainOneself)
|
return GetChildList(parentIdExpression, pk, list, primaryKeyValue, isContainOneself);
|
||||||
{
|
|
||||||
var result = GetChildList(parentIdExpression, pk, list, primaryKeyValue);
|
|
||||||
var pkDb = this.Context.EntityMaintenance.GetEntityInfo<T>().Columns.FirstOrDefault(z => z.PropertyName == pk);
|
|
||||||
if (pkDb != null)
|
|
||||||
{
|
|
||||||
var addItem = list.Where(z => pkDb.PropertyInfo.GetValue(z, null).Equals(primaryKeyValue)).FirstOrDefault();
|
|
||||||
if (addItem != null)
|
|
||||||
{
|
|
||||||
result.Add(addItem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return GetChildList(parentIdExpression, pk, list, primaryKeyValue);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public List<T> ToParentList(Expression<Func<T, object>> parentIdExpression, object primaryKeyValue)
|
public List<T> ToParentList(Expression<Func<T, object>> parentIdExpression, object primaryKeyValue)
|
||||||
{
|
{
|
||||||
@@ -2471,7 +2437,7 @@ namespace SqlSugar
|
|||||||
RestoreMapping();
|
RestoreMapping();
|
||||||
return new KeyValuePair<string, List<SugarParameter>>(sql, QueryBuilder.Parameters);
|
return new KeyValuePair<string, List<SugarParameter>>(sql, QueryBuilder.Parameters);
|
||||||
}
|
}
|
||||||
private List<T> GetChildList(Expression<Func<T, object>> parentIdExpression, string pkName, List<T> list, object rootValue,bool isRoot=true)
|
private List<T> GetChildList(Expression<Func<T, object>> parentIdExpression, string pkName, List<T> list, object rootValue, bool isContainOneself)
|
||||||
{
|
{
|
||||||
var exp = (parentIdExpression as LambdaExpression).Body;
|
var exp = (parentIdExpression as LambdaExpression).Body;
|
||||||
if (exp is UnaryExpression)
|
if (exp is UnaryExpression)
|
||||||
@@ -2479,11 +2445,11 @@ namespace SqlSugar
|
|||||||
exp = (exp as UnaryExpression).Operand;
|
exp = (exp as UnaryExpression).Operand;
|
||||||
}
|
}
|
||||||
var parentIdName = (exp as MemberExpression).Member.Name;
|
var parentIdName = (exp as MemberExpression).Member.Name;
|
||||||
var result = BuildChildList(list, pkName, parentIdName, rootValue);
|
var result = BuildChildList(list, pkName, parentIdName, rootValue, isContainOneself);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<T> BuildChildList(List<T> list, string idName, string pIdName, object rootValue)
|
private static List<T> BuildChildList(List<T> list, string idName, string pIdName, object rootValue, bool isContainOneself)
|
||||||
{
|
{
|
||||||
var type = typeof(T);
|
var type = typeof(T);
|
||||||
var idProp = type.GetProperty(idName);
|
var idProp = type.GetProperty(idName);
|
||||||
@@ -2507,7 +2473,18 @@ namespace SqlSugar
|
|||||||
return finalList;
|
return finalList;
|
||||||
};
|
};
|
||||||
|
|
||||||
return fc(rootValue.ObjToString());
|
var 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<T> GetTreeRoot(Expression<Func<T, IEnumerable<object>>> childListExpression, Expression<Func<T, object>> parentIdExpression, string pk, List<T> list,object rootValue)
|
private List<T> GetTreeRoot(Expression<Func<T, IEnumerable<object>>> childListExpression, Expression<Func<T, object>> parentIdExpression, string pk, List<T> list,object rootValue)
|
||||||
|
@@ -1363,48 +1363,14 @@ namespace SqlSugar
|
|||||||
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
|
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
|
||||||
var pk = GetTreeKey(entity);
|
var pk = GetTreeKey(entity);
|
||||||
var list = this.ToList();
|
var list = this.ToList();
|
||||||
if (isContainOneself)
|
return GetChildList(parentIdExpression, pk, list, primaryKeyValue, isContainOneself);
|
||||||
{
|
|
||||||
var result= GetChildList(parentIdExpression, pk, list, primaryKeyValue);
|
|
||||||
var pkDb = this.Context.EntityMaintenance.GetEntityInfo<T>().Columns.FirstOrDefault(z=>z.PropertyName==pk);
|
|
||||||
if (pkDb != null)
|
|
||||||
{
|
|
||||||
var addItem = list.Where(z => pkDb.PropertyInfo.GetValue(z, null).Equals(primaryKeyValue)).FirstOrDefault();
|
|
||||||
if (addItem != null)
|
|
||||||
{
|
|
||||||
result.Add(addItem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return GetChildList(parentIdExpression, pk, list, primaryKeyValue);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public async Task<List<T>> ToChildListAsync(Expression<Func<T, object>> parentIdExpression, object primaryKeyValue,bool isContainOneself=true)
|
public async Task<List<T>> ToChildListAsync(Expression<Func<T, object>> parentIdExpression, object primaryKeyValue,bool isContainOneself=true)
|
||||||
{
|
{
|
||||||
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
|
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
|
||||||
var pk = GetTreeKey(entity);
|
var pk = GetTreeKey(entity);
|
||||||
var list = await this.ToListAsync();
|
var list = await this.ToListAsync();
|
||||||
if (isContainOneself)
|
return GetChildList(parentIdExpression, pk, list, primaryKeyValue, isContainOneself);
|
||||||
{
|
|
||||||
var result = GetChildList(parentIdExpression, pk, list, primaryKeyValue);
|
|
||||||
var pkDb = this.Context.EntityMaintenance.GetEntityInfo<T>().Columns.FirstOrDefault(z => z.PropertyName == pk);
|
|
||||||
if (pkDb != null)
|
|
||||||
{
|
|
||||||
var addItem = list.Where(z => pkDb.PropertyInfo.GetValue(z, null).Equals(primaryKeyValue)).FirstOrDefault();
|
|
||||||
if (addItem != null)
|
|
||||||
{
|
|
||||||
result.Add(addItem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return GetChildList(parentIdExpression, pk, list, primaryKeyValue);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public List<T> ToParentList(Expression<Func<T, object>> parentIdExpression, object primaryKeyValue)
|
public List<T> ToParentList(Expression<Func<T, object>> parentIdExpression, object primaryKeyValue)
|
||||||
{
|
{
|
||||||
@@ -2471,7 +2437,7 @@ namespace SqlSugar
|
|||||||
RestoreMapping();
|
RestoreMapping();
|
||||||
return new KeyValuePair<string, List<SugarParameter>>(sql, QueryBuilder.Parameters);
|
return new KeyValuePair<string, List<SugarParameter>>(sql, QueryBuilder.Parameters);
|
||||||
}
|
}
|
||||||
private List<T> GetChildList(Expression<Func<T, object>> parentIdExpression, string pkName, List<T> list, object rootValue,bool isRoot=true)
|
private List<T> GetChildList(Expression<Func<T, object>> parentIdExpression, string pkName, List<T> list, object rootValue, bool isContainOneself)
|
||||||
{
|
{
|
||||||
var exp = (parentIdExpression as LambdaExpression).Body;
|
var exp = (parentIdExpression as LambdaExpression).Body;
|
||||||
if (exp is UnaryExpression)
|
if (exp is UnaryExpression)
|
||||||
@@ -2479,11 +2445,11 @@ namespace SqlSugar
|
|||||||
exp = (exp as UnaryExpression).Operand;
|
exp = (exp as UnaryExpression).Operand;
|
||||||
}
|
}
|
||||||
var parentIdName = (exp as MemberExpression).Member.Name;
|
var parentIdName = (exp as MemberExpression).Member.Name;
|
||||||
var result = BuildChildList(list, pkName, parentIdName, rootValue);
|
var result = BuildChildList(list, pkName, parentIdName, rootValue, isContainOneself);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<T> BuildChildList(List<T> list, string idName, string pIdName, object rootValue)
|
private static List<T> BuildChildList(List<T> list, string idName, string pIdName, object rootValue, bool isContainOneself)
|
||||||
{
|
{
|
||||||
var type = typeof(T);
|
var type = typeof(T);
|
||||||
var idProp = type.GetProperty(idName);
|
var idProp = type.GetProperty(idName);
|
||||||
@@ -2507,7 +2473,18 @@ namespace SqlSugar
|
|||||||
return finalList;
|
return finalList;
|
||||||
};
|
};
|
||||||
|
|
||||||
return fc(rootValue.ObjToString());
|
var 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<T> GetTreeRoot(Expression<Func<T, IEnumerable<object>>> childListExpression, Expression<Func<T, object>> parentIdExpression, string pk, List<T> list,object rootValue)
|
private List<T> GetTreeRoot(Expression<Func<T, IEnumerable<object>>> childListExpression, Expression<Func<T, object>> parentIdExpression, string pk, List<T> list,object rootValue)
|
||||||
|
Reference in New Issue
Block a user