ToTree support for non-primary key

This commit is contained in:
sunkaixuan 2022-05-11 17:17:58 +08:00
parent 62fa9cc34e
commit b525b22cf3
4 changed files with 20 additions and 8 deletions

View File

@ -280,6 +280,7 @@ namespace SqlSugar
column.UIndexGroupNameList = sugarColumn.UniqueGroupNameList;
column.IsOnlyIgnoreUpdate = sugarColumn.IsOnlyIgnoreUpdate;
column.IsArray = sugarColumn.IsArray;
column.IsTreeKey = sugarColumn.IsTreeKey;
}
else
{

View File

@ -1177,16 +1177,14 @@ namespace SqlSugar
public List<T> ToChildList(Expression<Func<T, object>> parentIdExpression, object primaryKeyValue)
{
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
Check.Exception(entity.Columns.Where(it => it.IsPrimarykey).Count() == 0, "No Primary key");
var pk = entity.Columns.Where(it => it.IsPrimarykey).First().PropertyName;
var pk = GetTreeKey(entity);
var list = this.ToList();
return GetChildList(parentIdExpression, pk, list, primaryKeyValue);
}
public async Task<List<T>> ToChildListAsync(Expression<Func<T, object>> parentIdExpression, object primaryKeyValue)
{
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
Check.Exception(entity.Columns.Where(it => it.IsPrimarykey).Count() == 0, "No Primary key");
var pk = entity.Columns.Where(it => it.IsPrimarykey).First().PropertyName;
var pk = GetTreeKey(entity);
var list = await this.ToListAsync();
return GetChildList(parentIdExpression,pk,list, primaryKeyValue);
}
@ -1267,8 +1265,7 @@ namespace SqlSugar
public List<T> ToTree(Expression<Func<T, IEnumerable<object>>> childListExpression, Expression<Func<T, object>> parentIdExpression, object rootValue)
{
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
Check.Exception(entity.Columns.Where(it => it.IsPrimarykey).Count() == 0, "No Primary key");
var pk = entity.Columns.Where(it => it.IsPrimarykey).First().PropertyName;
var pk = GetTreeKey(entity);
var list = this.ToList();
return GetTreeRoot(childListExpression, parentIdExpression, pk, list, rootValue);
}
@ -1276,8 +1273,7 @@ namespace SqlSugar
public async Task<List<T>> ToTreeAsync(Expression<Func<T, IEnumerable<object>>> childListExpression, Expression<Func<T, object>> parentIdExpression, object rootValue)
{
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
Check.Exception(entity.Columns.Where(it => it.IsPrimarykey).Count() == 0, "No Primary key");
var pk = entity.Columns.Where(it => it.IsPrimarykey).First().PropertyName;
var pk = GetTreeKey(entity); ;
var list =await this.ToListAsync();
return GetTreeRoot(childListExpression, parentIdExpression, pk, list,rootValue);
}
@ -2215,6 +2211,14 @@ namespace SqlSugar
QueryBuilder.IsCount = true;
result = 0;
}
private static string GetTreeKey(EntityInfo entity)
{
Check.Exception(entity.Columns.Where(it => it.IsPrimarykey || it.IsTreeKey).Count() == 0, "need IsPrimary=true Or IsTreeKey=true");
string pk = entity.Columns.Where(it => it.IsTreeKey).FirstOrDefault()?.PropertyName;
if (pk == null)
pk = entity.Columns.Where(it => it.IsPrimarykey).FirstOrDefault()?.PropertyName;
return pk;
}
protected ISugarQueryable<TResult> _Select<TResult>(Expression expression)
{
QueryBuilder.CheckExpression(expression, "Select");

View File

@ -19,6 +19,7 @@ namespace SqlSugar
public bool IsNullable { get; set; }
public bool IsIdentity { get; set; }
public bool IsPrimarykey { get; set; }
public bool IsTreeKey { get; set; }
public bool IsEnableUpdateVersionValidation { get; set; }
public string EntityName { get; set; }
public string DbTableName { get; set; }

View File

@ -190,6 +190,12 @@ namespace SqlSugar
set { _IsArray = value; }
}
private bool _IsTreeKey;
public bool IsTreeKey
{
get { return _IsTreeKey; }
set { _IsTreeKey = value; }
}
}