2009-10-14 10 views
10

Dada la siguiente configuración del código:Seleccionar valores distintos en todas las colecciones anidadas utilizando LINQ para objetos?

public class Foo { 
List<string> MyStrings { get; set; } 
} 

List<Foo> foos = GetListOfFoosFromSomewhere(); 

¿Cómo puedo obtener una lista de todas las cadenas distintas en MyStrings a través de todas las instancias de Foo utilizando LINQ? Siento que esto debería ser fácil, pero no puedo entenderlo.

string[] distinctMyStrings = ? 

Respuesta

14
// If you dont want to use a sub query, I would suggest: 

     var result = (
      from f in foos 
      from s in f.MyStrings 
      select s).Distinct(); 

     // Which is absoulutely equivalent to: 

     var theSameThing = foos.SelectMany(i => i.MyStrings).Distinct(); 

     // pick the one you think is more readable. 

También recomiendo encarecidamente la lectura de la MSDN en los métodos de extensión enumerables. ¡Es muy informativo y tiene excelentes ejemplos!

Cuestiones relacionadas