2012-04-18 4 views
3

これはforeachループへの道だけですラムダ式ですか?生活のためにこのdouble foreachループをlambdaに変換するにはどうすればよいですか?

private int getNextEventId() 
    { 
     int numOfEvents = 0; 

     foreach (MonthModel eventMonth in eventsForAllMonths) 
     { 
      foreach (DayModel eventDay in eventMonth.AllDays) 
      { 
       numOfEvents += eventDay.CalEvents.Count; 
      } 
     } 

     return numOfEvents + 1; 
    } 
+0

「ちょうどONEラムダ」と言ったことはありますか?誰も「ただ一つ」の答えを提供しました... –

+0

私はあなたの質問をよく理解していません。しかし、人々の多くは私が尋ねていたことを理解しているようです:) – dotnetN00b

+1

あなたは1つ=> –

答えて

15
int numOfEvents = eventsForAllMonths.SelectMany(m => m.AllDays) 
            .Select(d => d.CalEvents.Count) 
            .Sum(); 
0

I ForEach()ので、この程度

private int getNextEventId() 
    { 
     int numOfEvents = eventsForAllMonths.SelectMany(eventMonth => eventMonth.AllDays).Aggregate(0, (current, eventDay) => current + eventDay.CalEvents.Count); 

     return numOfEvents + 1; 
    } 
+0

を意味しますこれはplinq-safeではありません:) –

+0

と 'eventsForAllMonths'は' List'ではありません –

+1

eventsForAllMonthsのタイプに応じて動作しません。 ForEachはList にのみ利用可能です。 eventsForAllMonthsが他のものであれば、これは失敗します。 –

2

はこれを試してみてください?

return 
    (from m in eventsForAllMonths 
    from d in m.AllDays 
    select d.CalEvents.Count).Sum() + 1; 
3
return (eventsForAllMonths.SelectMany(eventMonth => eventMonth.AllDays).Sum(eventDay => eventDay.CalEvents.Count) + 1); 
2

方法:

eventsForallMonths.ForEach(em=>em.ForEach(ed=>numOfEvents+=ed.CalEvents.Count)); 
0

ラムダでこれを変換するのはどうですか?

List<Item> listItem = new List<Item>(); 
foreach (StackPanel sp in spPhotos.Children) 
{ 
    foreach(Item item in sp.Children) 
    { 
     listItem.Add(item); 
    } 
    sp.Children.Clear(); 
} 
spPhotos.Children.Clear(); 
関連する問題