Метод TakeWhile LINQ не дает ожидаемого результата - PullRequest
2 голосов
/ 05 июля 2010

Я ожидаю строку с "i", но получаю пустые результаты.Вы можете сказать мне причину?

PetOwner [] petOwners = {new PetOwner {Name = "sen", Pets = новый список {"puppy", "tiger"}}, new PetOwner {Name = "sugu", Pets = новый список {" jimmy "," rose "}}
};

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

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

1 Ответ

3 голосов
/ 05 июля 2010

Не используйте TakeWhile для этого - он завершает цикл, как только встречает элемент, для которого выражение возвращает false. Вместо этого используйте Where. Также просто используйте обычный цикл foreach для выполнения вывода вместо помещения вызова WriteLine внутри лямбда-функции. Это значительно облегчает понимание вашего кода.

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