TreeExtensions.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace Masuit.Tools.Core.Models
  5. {
  6. /// <summary>
  7. /// 树形数据扩展
  8. /// </summary>
  9. public static class TreeExtensions
  10. {
  11. /// <summary>
  12. /// 过滤
  13. /// </summary>
  14. /// <typeparam name="T"></typeparam>
  15. /// <param name="items"></param>
  16. /// <param name="func"></param>
  17. /// <returns></returns>
  18. public static IEnumerable<T> Filter<T>(this IEnumerable<T> items, Func<T, bool> func) where T : class, ITree<T>
  19. {
  20. var results = new List<T>();
  21. foreach (var item in items.Where(i => i != null))
  22. {
  23. item.Children = item.Children.Filter(func).ToList();
  24. if (item.Children.Any() || func(item))
  25. {
  26. results.Add(item);
  27. }
  28. }
  29. return results;
  30. }
  31. /// <summary>
  32. /// 过滤
  33. /// </summary>
  34. /// <typeparam name="T"></typeparam>
  35. /// <param name="item"></param>
  36. /// <param name="func"></param>
  37. /// <returns></returns>
  38. public static IEnumerable<T> Filter<T>(this T item, Func<T, bool> func) where T : class, ITree<T>
  39. {
  40. return (new[] { item }).Filter(func);
  41. }
  42. /// <summary>
  43. /// 平铺开
  44. /// </summary>
  45. /// <typeparam name="T"></typeparam>
  46. /// <param name="items"></param>
  47. /// <returns></returns>
  48. public static IEnumerable<T> Flatten<T>(this IEnumerable<T> items) where T : ITree<T>
  49. {
  50. var result = new List<T>();
  51. foreach (var item in items)
  52. {
  53. result.Add(item);
  54. result.AddRange(item.Children.Flatten());
  55. }
  56. return result;
  57. }
  58. }
  59. }