Thursday, March 3, 2011

How to merge a collection of collections in Linq

I would like to be able to fusion an IEnumerable<IEnumerable<T>> into IEnumerable<T> (i.e. merge all individual collections into one). The Union operators only applies to two collections. Any idea?

From stackoverflow
  • Try

    var it = GetTheNestedCase();
    return it.SelectMany(x => x);
    

    SelectMany is a LINQ transformation which essentially says "For Each Item in a collection return the elements of a collection". It will turn one element into many (hence SelectMany). It's great for breaking down collections of collections into a flat list.

  • var lists = GetTheNestedCase();
    return
        from list in lists
        from element in list
        select element;
    

    is another way of doing this using C# 3.0 query expression syntax.

0 comments:

Post a Comment