2010-10-14 1136 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(); 

Quiero una lista distinta de todos los objetos ClassA en el classBList. ¿Cómo hago esto usando linq? Estoy pensando en una consulta anidada pero no pude resolverlo. Se agradece mucho cualquier ayuda.Usando LINQ, seleccione la lista de objetos dentro de otra lista de objetos

Respuesta

69

Está tratando de seleccionar múltiples objetos de resultados para cada objeto ClassB en la lista original.

Por lo tanto, se está buscando la SelectMany extension method:

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

Si desea utilizar expresiones de consulta, necesitará utilizar two from clauses:

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

perfecto, gracias! – Tom

+0

¿La sintaxis de consulta que proporciona utiliza SelectMany una vez traducida? Soy un poco ingenuo cuando se trata de sintaxis de consulta, ya que siempre se ve más prolijo (excepto en situaciones de unión). –

+0

@Justin: Sí; esas dos expresiones deberían compilarse de manera idéntica. – SLaks

11

Desea utilizar IEnumerable.SelectMany() Extensión Método para aplanar la jerarquía:

var result = classBList.SelectMany(b => b.MyObjects).Distinct(); 
Cuestiones relacionadas