tags:

views:

337

answers:

3

The question is confusing, but it is much more clear as described in the following codes:

   List<List<T>> listOfList;
   // add three lists of List<T> to listOfList, for example
   /* listOfList = new {
        { 1, 2, 3}, // list 1 of 1, 3, and 3
        { 4, 5, 6}, // list 2
        { 7, 8, 9}  // list 3
        };
   */
   List<T> list = null;
   // how to merger all the items in listOfList to list?
   // { 1, 2, 3, 4, 5, 6, 7, 8, 9 } // one list
   // list = ???

Not sure if it possible by using C# LINQ or Lambda?

+14  A: 

Use the SelectMany extension method

list = listOfList.SelectMany(x => x).ToList();
JaredPar
I wonder how many folks have written their own "Flatten" extension not realizing how SelectMany works?
James Schek
+2  A: 

Do you mean this?

var listOfList = new List<List<int>>() {
 new List<int>() { 1, 2 },
 new List<int>() { 3, 4 },
 new List<int>() { 5, 6 }
};
var list = new List<int> { 9, 9, 9 };
var result = list.Concat(listOfList.SelectMany(x => x));

foreach (var x in result) Console.WriteLine(x);

Results in: 9 9 9 1 2 3 4 5 6

IRBMe
Or you could use list.AddRange() instead of Concat() to add the merged items to the existing list.
dahlbyk
+2  A: 

Here's the C# integrated syntax version:

var items =
    from list in listOfList
    from item in list
    select item;
Joe Chung
Little bit confusing, but nice. How this? var items = from item in (from list in listOflist select list) select item
David.Chu.ca
The 'double from' is the same as SelectMany ... SelectMany is probably the most powerful of the LINQ methods (or query operators). To see why, Google "LINQ SelectMany Monad" and you'll discover more than you'll want to know about it.
Richard Hein