2009-03-16 16 views
27

ben tip B ait nesneler listesi oluşur tip A bir nesne var:Linq: Uzun bir listeye listeleri listesi

class A { list<B> Alist;} 
class B { string C; string D;} 

benim programda ben A nesnelerin bir listesi var:

list<A> listOfA = computeAList(); 

ve ben istiyorum o listedeki tüm C dizeleri seçin. Bana istediğim sonucu verecek ümit aşağıdaki deyimi; o içeren listelerin bir listesini döndürür C 'ler:

var query = from objectA in listOfA 
      select objectA.Alist.FindAll(x => x.C.Length > 0).C; 

tüm C tek listesini almak için bir yolu var mı' ın yerine?

cevap

46

ybo'nun cevabı benim de ilk cevabımdı. Bu sorgu ifade eşdeğerdir: Bütünlük adına

var query = from a in computeAList() 
      from b in a.Alist 
      select b.C; 

, bu iplik içinde, diğer cevaplar aynı temaya varyasyonlarıdır. (Burada maddesi de dahil olmak üzere, bir hafif biçimlendirdiğimiz)

Ray Hayes kaynaktan
var query = listOfA.SelectMany(a => a.Alist, (a, b) => b.C); 

:

YBO kaynaktan

(tam olarak aynı terimi, nokta gösterimi olarak ifade edilir) de

var query = listOfA.SelectMany(a => a.AList, (a, b) => b.C) 
        .Where(c => c.Length > 0); 
+0

Tam olarak aradığım şey buydu - Çok teşekkürler Jon! – Chau

+0

@Jon Üzgünüm, yorumunuzu görmedim. Şimdi * sen * Ray'in cevabını içerebilir;). Hem sen hem de Ray'a teşekkürler. – ybo

+0

Şu ana kadar yaklaşık 20 defa bu cevaba gittim. Neden "selectmany" yi hatırlayamıyorum ve her zaman "selectall" ı deneyemiyorum ama her zaman olur. Şanslı bu her zaman sadece bir google uzakta! – statue

14

I Benzer bir yanıt olurdu, benim tek değişiklik boş dizeleri (C boş olduğu) önlemek için nerede yan tümce eklemek oldu (burada C boş):

İlgili konular