TakeWhile LINQ方法没有按预期给出结果

时间:2010-07-05 15:27:39

标签: linq-to-objects

我期待的字符串中包含“i”但结果为空。你能告诉我原因吗?

PetOwner [] petOwners = {new PetOwner {Name =“sen”,Pets = new List {“puppy”,“tiger”}},                                      新的PetOwner {Name =“sugu”,Pets = new List {“jimmy”,“rose”}}
                                   };

        var pets = petOwners.SelectMany(p => p.Pets);

        var pets1 = pets.TakeWhile<string>(s => { Console.WriteLine(s); return s.Contains("i"); });

1 个答案:

答案 0 :(得分:3)

不要使用TakeWhile - 它会在遇到表达式返回false的元素时立即终止循环。请改用Where。也只是使用普通的foreach循环来执行输出,而不是将调用WriteLine放在lambda函数中。这使您更容易理解您的代码。

var petsContainingI = petOwners.SelectMany(p => p.Pets).Where(s => s.Contains("i"));
foreach (string s in petsContainingI)
{
    Console.WriteLine(s);
}