2017-05-31 45 views
3

我試圖找出一種方式來使用TakeWhile打破一個循環時,滿足一些條件。當計數或長度條件滿足時使用TakeWhile打破循環

var i = 0; 
List<IContent> t = new List<IContent>(); 

// children is a List<> with lots of items 
foreach (var x in children) 
{ 
    if (i >= 10) 
    { 
     break; 
    } 

    if (x.ContentTypeID == 123) 
    { 
     i++; 
     t.Add(x); 
    }  
} 

我想要做的是編寫使用LINQ,而不是

var i = 0; 
var a = children.TakeWhile(
    x => 
    { 
     if (i >= 10) 
     { 
      break; // wont work 
     } 

     if (x.ContentTypeID == 123) 
     { 
      i++; 
      return true; 
     } 

     return false; 
    }); 

任何想法?由於

回答

4

你並不需要一個TakeWhile在這裏 - 只是篩選符合您的條件哪些項目,並採取不超過10匹配項:

children.Where(x => x.ContentTypeID == 123).Take(10) 

TakeWhile需要所有項目,而一些條件得到滿足。但是你不需要拿所有物品 - 你想跳過那些沒有要求的物品ContentTypeID

+0

不會遍歷整個'children'列表嗎? –

+1

@EricHerlitz不,如果你有超過10個匹配的項目。正如你的第一個循環所做的那樣 –

+1

似乎你是對的,愚蠢的我會過度複雜的事情 –

1

接受的答案解決了該帖子。這個答案解決了題目。

TakeWhile和Take可以一起使用。 TakeWhile將在第一次不匹配時停止,Take在一定次數的比賽後停止。

var playlist = music.TakeWhile(x => x.Type == "Jazz").Take(5); 
相關問題