2010-07-05 5 views
2

J'attends la chaîne qui a "i" mais qui obtient des résultats vides. Pouvez-vous me dire la raison?La méthode TakeWhile LINQ ne donne pas le résultat attendu

PetOwner [] petOwners = {nouveau PetOwner {Name = "sen", Pets = nouveau Liste {"chiot", "tiger"}}, nouveau PetOwner {Name = "sugu", Pets = new Liste {" jimmy "," rose "}}
};

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

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

Répondre

3

Ne pas utiliser TakeWhile pour cela - il termine la boucle dès qu'il rencontre un élément pour lequel l'expression renvoie false. Utilisez Where à la place. Utilisez simplement une boucle foreach ordinaire pour faire la sortie au lieu de mettre l'appel à WriteLine dans la fonction lambda. Cela facilite beaucoup la compréhension de votre code.

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