2009-04-23 9 views
9

Tengo problemas para la agregación de múltiples matrices en una "gran variedad", creo que esto debería ser posible en LINQ, pero no puedo conseguir mi cabeza alrededor de ella :(agregan múltiples matrices en una sola matriz (LINQ)

considerar algún método que devuelve una matriz de algunas dummyObjects

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

ahora en alguna parte tengo esto:

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

espero que sea un poco claro lo que estoy tratando de lograr (como extra Quiero pedir esta matriz por un valor int que DummyObject tiene ... - pero la orden no debería ser un problema, ... espero;)

+2

Creo que acaba de responder esta pregunta: http://stackoverflow.com/questions/780867/ –

+0

Sí, es el mismo principio, pero éste ha añadido el giro de tener una lista de objetos con un método que devuelve las matrices. – Guffa

Respuesta

15

Utiliza el método SelectMany para aplanar la lista de matriz que devuelve objetos a una matriz.

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

} 

Ejemplo:

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(); 
+0

+1. Me perdí el aspecto "múltiple" en mi respuesta ahora eliminada. – AnthonyWJones

+0

exactamente lo que estaba buscando :) gracias adicionales por incluir el orden! (todavía puede solo +1) – Bluenuance

Cuestiones relacionadas