tags:

views:

572

answers:

1

I'm having trouble aggregating multiple arrays into one "big array", I think this should be possible in Linq but I can't get my head around it :(

consider some method which returns an array of some dummyObjects

public class DummyObjectReceiver 
{
  public DummyObject[] GetDummyObjects  { -snip- }
}

now somewhere I have this:

public class Temp
{
  public List<DummyObjectReceiver> { get; set; }

  public DummyObject[] GetAllDummyObjects ()
  {
    //here's where I'm struggling (in linq) - no problem doing it using foreach'es... ;)
  }
}

hope it's somewhat clear what I'm trying to achieve (as extra I want to order this array by an int value the DummyObject has... - but the orderby should be no problem,... I hope ;)

+5  A: 

You use the SelectMany method to flatten the list of array returning objects into an array.

public class DummyObject {
 public string Name;
 public int Value;
}

public class DummyObjectReceiver  {

 public DummyObject[] GetDummyObjects()  {
  return new DummyObject[] {
   new DummyObject() { Name = "a", Value = 1 },
   new DummyObject() { Name = "b", Value = 2 }
  };
 }

}

public class Temp {

 public List<DummyObjectReceiver> Receivers { get; set; }

 public DummyObject[] GetAllDummyObjects() {
  return Receivers.SelectMany(r => r.GetDummyObjects()).OrderBy(d => d.Value).ToArray();
 }

}

Example:

Temp temp = new Temp();
temp.Receivers = new List<DummyObjectReceiver>();
temp.Receivers.Add(new DummyObjectReceiver());
temp.Receivers.Add(new DummyObjectReceiver());
temp.Receivers.Add(new DummyObjectReceiver());

DummyObject[] result = temp.GetAllDummyObjects();
Guffa
+1. I missed the "multiple" aspect in my now deleted answer.
AnthonyWJones
exactly what I was looking for :)extra thanks for including orderby! (still can only +1)
Calamitous