2009-04-23 117 views
9

我在將多個數組聚合成一個「大數組」時遇到問題,我認爲這應該可能在Linq中,但我無法繞過它:(將多個數組聚合成一個數組(Linq)

考慮一些返回一些dummyObjects數組

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

現在的地方我有這樣的方法:

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

希望它有點清楚我想要實現 (作爲額外的我想通過一個int數值來命令這個數組DummyObject具有... - 但是orderby應該沒有問題,...我希望;)

+2

我想我剛纔已經回答過這個問題:http://stackoverflow.com/questions/780867/ – 2009-04-23 10:23:28

+0

是的,同樣的道理,但是這一次又多了使用返回數組的方法獲取對象列表。 – Guffa 2009-04-23 11:18:31

回答

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

} 

例子:

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(); 
相關問題