| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Linq.Expressions;
- namespace System.Common
- {
- public static class TreeQuery
- {
- public static List<T> TreeWhere<T>(this List<T> entityList, Predicate<T> condition, string keyValue = "F_Id", string parentId = "F_ParentId") where T : class
- {
- List<T> locateList = entityList.FindAll(condition);
- var parameter = Expression.Parameter(typeof(T), "t");
- List<T> treeList = new List<T>();
- foreach (T entity in locateList)
- {
- treeList.Add(entity);
- int pid = int.Parse(entity.GetType().GetProperty(parentId).GetValue(entity, null).ToString());
- //string pId = entity.GetType().GetProperty(parentId).GetValue(entity, null).ToString();
- while (true)
- {
- if(pid<=0)
- { break; }
- //if (string.IsNullOrEmpty(pId) && pId == "0")
- //{
- // break;
- //}
- //Predicate<T> upLambda = (Expression.Equal(parameter.Property(keyValue), Expression.Constant(pId))).ToLambda<Predicate<T>>(parameter).Compile();
- Predicate<T> upLambda = (Expression.Equal(parameter.Property(keyValue), Expression.Constant(pid))).ToLambda<Predicate<T>>(parameter).Compile();
- T upRecord = entityList.Find(upLambda);
- if (upRecord != null)
- {
- treeList.Add(upRecord);
- //pId = upRecord.GetType().GetProperty(parentId).GetValue(upRecord, null).ToString();
- pid = int.Parse(upRecord.GetType().GetProperty(parentId).GetValue(upRecord, null).ToString());
- }
- else
- {
- break;
- }
- }
- }
- return treeList.Distinct().ToList();
- }
- }
- }
|