TreeCopy.cs 765 B

123456789101112131415161718192021222324252627
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace VCommon.DataModel
  5. {
  6. public static class TreeCopy
  7. {
  8. public static IEnumerable<TTo> CreateFrom<TFrom, TTo, TKey, TValue>(
  9. IEnumerable<TFrom> source,
  10. Func<TKey, TValue, IEnumerable<TTo>, TTo> create,
  11. Func<TFrom, TKey> keySelector,
  12. Func<TFrom, TValue> valueSelector,
  13. Func<TFrom, IEnumerable<TFrom>> childSelector)
  14. {
  15. return source.Select(p =>
  16. create(
  17. keySelector(p),
  18. valueSelector(p),
  19. CreateFrom(childSelector(p), create, keySelector, valueSelector, childSelector)
  20. )
  21. );
  22. }
  23. }
  24. }