Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>In <a href="https://stackoverflow.com/questions/1815497/enumerating-collections-that-are-not-inherently-ienumerable">this</a> related question several approaches are discussed: </p> <ul> <li>The recursive one, will probably be the easiest to implement, however in terms of scaling for depth and number of items, it is limited as it tends to exponentially take longer and risks overflowing your stack</li> <li>Another approach would be to use a stack which in terms of scaling has a much more linear growth</li> </ul> <p>Be sure to check out Eric Lippert's comment at the bottom of the page.</p> <p>Update, to give you an idea of what I mean:</p> <pre><code>public static class Extensions { public static IList&lt;R&gt; TransformTree&lt;T, R&gt;(this IEnumerable&lt;T&gt; collection, Func&lt;T, IEnumerable&lt;T&gt;&gt; entitySelector, Func&lt;R, IList&lt;R&gt;&gt; pocoSelector, Func&lt;T, R&gt; transformer) { var transformedList = new List&lt;R&gt;(); var stack = new Stack&lt;IEnumerable&lt;T&gt;&gt;(); var parents = new Dictionary&lt;IEnumerable&lt;T&gt;, R&gt;(); stack.Push(collection); while (stack.Count &gt; 0) { IEnumerable&lt;T&gt; items = stack.Pop(); R transformedParent; IList&lt;R&gt; parentChildren = parents.TryGetValue(items, out transformedParent) ? pocoSelector(transformedParent) : transformedList; foreach (var item in items) { R transformedItem = transformer(item); parentChildren.Add(transformedItem); IEnumerable&lt;T&gt; children = entitySelector(item); stack.Push(children); parents.Add(children, transformedItem); } } return transformedList; } } </code></pre> <p>Call it like so:</p> <pre><code>treeItems.TransformTree&lt;TreeItem, TreeItemPoco&gt;( (item) =&gt; { return item.Children; }, (pocoItem) =&gt; { return pocoItem.Children; }, (item) =&gt; { return new TreeItemPoco(item); }); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload