2010-01-14 17 views
6

AşağıdakiLINQ: Öğelerin Listesini Başka Bir Listeye Ekleme

public class Element 
{ 
    public List<int> Ints 
    { 
    get;private set; 
    } 
} 

değerine sahibim List<Element> verildiğinde, List<Element>'in içinde LINQ kullanarak List<Element>'in tümünün listesi nasıl bulunur?

Şu kodları kullanabilirim

public static List<int> FindInts(List<Element> elements) 
{ 
var ints = new List<int>(); 
foreach(var element in elements) 
{ 
    ints.AddRange(element.Ints); 
} 
return ints; 
} 
} 

Fakat yazdığım her seferde kusmak istediğim çok çirkin ve uzun bir sargı var.

Herhangi bir fikir?

cevap

10
return (from el in elements 
     from i in el.Ints 
     select i).ToList(); 

ya da belki sadece a List<int> dümdüz

public Element() { 
    Ints = new List<int>(); 
} 
+0

yerine "x.ToList()" nin " (x) yeni Listesi" kullanılan bir nedeni var mı? –

+1

@Andrew özellikle değil; ya işler, vb –

3

Sadece almak için SelectMany kullanabilirsiniz:: Btw

return new List<int>(elements.SelectMany(el => el.Ints)); 

, muhtemelen listeyi başlatmak isteyeceksiniz

public static List<int> FindInts(List<Element> elements) 
{ 
    return elements.SelectMany(e => e.Ints).ToList(); 
} 
0

... ya toplayarak:

List<Elements> elements = ... // Populate  
List<int> intsList = elements.Aggregate(Enumerable.Empty<int>(), (ints, elem) => ints.Concat(elem.Ints)).ToList(); 
İlgili konular