当计数或长度条件满足时,使用TakeWhile打破循环

时间:2017-05-31 10:49:24

标签: c# linq

我试图想办法在满足某些条件时使用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;
    });

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:4)

此处您不需要TakeWhile - 只需过滤符合您条件的项目,并且不超过10个匹配的项目:

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

TakeWhile会在满足某些条件的情况下使用所有项目。但是您不需要采取所有项目 - 您希望跳过那些没有必需ContentTypeID的项目。

答案 1 :(得分:1)

接受的答案解决了这个帖子。这个答案涉及标题。

TakeWhile和Take可以一起使用。 TakeWhile将在第一场比赛中停止,Take将在一定数量的比赛后停止。

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