2010-10-14 11 views
32
public class ClassA 
{ 
    public string MyString {get; set;} 
} 

public class ClassB 
{ 
    public List<ClassA> MyObjects {get; set;} 
} 

List<ClassB> classBList = new List<ClassB>(); 
var results = (from i in classBList select i.MyObjects).ToDistinct(); 

Desidero un elenco distinto di tutti gli oggetti ClassA in classList. Come faccio a fare questo usando linq? Sto pensando a una query nidificata ma non riesco a capirlo. Qualsiasi aiuto è bene accetto.Utilizzando LINQ, selezionare l'elenco di oggetti all'interno di un altro elenco di oggetti

risposta

69

Si sta provando a selezionare più oggetti risultato per ciascun oggetto ClassB nell'elenco originale.

Pertanto, si sta cercando il SelectMany extension method:

var results = classBList.SelectMany(b => b.MyObjects).Distinct(); 

Se si desidera utilizzare espressioni di query, avrete bisogno di utilizzare two from clauses:

var results = (from b in classBList from a in b.MyObjects select a).Distinct(); 
+0

perfetto, grazie! – Tom

+0

La sintassi della query fornita dall'utente seleziona SelectMany una volta tradotta? Sono un po 'ingenuo quando si tratta di sintassi della query poiché sembra sempre più dettagliato (tranne che nelle situazioni di join). –

+0

@Justin: Sì; queste due espressioni dovrebbero essere compilate in modo identico. – SLaks

11

Si desidera utilizzare IEnumerable.SelectMany() Extension Metodo per appiattire la gerarchia:

var result = classBList.SelectMany(b => b.MyObjects).Distinct(); 
Problemi correlati