将多个数组聚合为一个数组(Linq)

Blu*_*nce 9 .net linq c#-3.0

我在将多个数组聚合成一个"大数组"时遇到了麻烦,我认为这应该可以在Linq中实现,但我无法理解它:(

考虑一些返回一些dummyObject数组的方法

public class DummyObjectReceiver 
{
  public DummyObject[] GetDummyObjects  { -snip- }
}
Run Code Online (Sandbox Code Playgroud)

现在某处我有这个:

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... ;)
  }
}
Run Code Online (Sandbox Code Playgroud)

希望我有点清楚我想要实现的目标(因为额外的我想通过DummyObject有一个int值来命令这个数组...... - 但是orderby应该没问题,...我希望;)

Guf*_*ffa 15

您可以使用该SelectMany方法将数组返回对象列表展平为数组.

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();
    }

}
Run Code Online (Sandbox Code Playgroud)

例:

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();
Run Code Online (Sandbox Code Playgroud)