2009-09-24 17 views
10

Diyelim ki, bir dizi listelem var ve tüm listelerdeki tüm öğeleri saymak istiyorum. Sayımı LINQ ile nasıl hesaplayabilirim? (Burada sadece genel merakı)Bunu yapmak için LINQ'ish yolu nedir

İşte bunu yapmak için eski bir yolu:

 

List<item>[] Lists = // (init the array of lists) 
int count = 0; 
foreach(List<item> list in Lists) 
    count+= list.Count; 
return count; 
 

Bunu nasıl LINQify ki? (C# sözdizimi, lütfen)

cevap

27

Kullanım Sum() yöntemi:

int summedCount = Lists.Sum(l => l.Count); 
+2

true LINQ şunu kullanır: var summedCount = ... –

+7

@Travis: hiç de değil. Anonim türlerin kullanımı haricinde, herhangi bir durumda Var şartı değildir. Diğer tüm durumlarda, geliştiricinin memnun olduğu var ya da güçlü bir tür kullanmak için 'doğru' linq, tüm niyet ve amaçlar için pratik bir fark yoktur. – jrista

12

Sevdiğim @ jrista en bundan daha iyi cevap ama

int summedCount = Lists.SelectMany(x => x).Count(); 

Sadece durumda SelectMany kullanımını göstermek istedim yapabileceği Bir koleksiyon koleksiyonuyla başka şeyler yapmak istersiniz.

+2

SelectMany'i tanımlamanın güzel bir yolu. +1 – jrista

4

Ve

int summedCount = Lists.Aggregate(0, (acc,list) => acc + list.Count); 

fantezi olmak istiyorum Fakat ilk cevap kesinlikle en iyisi eğer.

İlgili konular