web-dev-qa-db-fra.com

question linq: interrogation des collections imbriquées

J'ai une classe Question qui a la propriété List publique qui peut contenir plusieurs Answers.

J'ai un référentiel de questions qui est chargé de lire les questions et ses réponses à partir d'un fichier xml.

J'ai donc une collection de Questions (Liste) avec chaque objet Question ayant une collection de Réponses et je voudrais interroger cette collection de Questions pour une réponse (c'est-à-dire par son nom) en utilisant Linq. Je ne sais pas comment faire ça correctement.

Je pourrais le faire avec un foreach mais j'aimerais savoir s'il existe une méthode Linq pure depuis que je l'apprends.

45
kitsune

Pour trouver une réponse.

questions.SelectMany(q => q.Answers).Where(a => a.Name == "SomeName")

Trouver la question d'une réponse.

questions.Where(q => q.Answers.Any(a => a.Name == "SomeName"))

En fait, vous obtiendrez des collections de réponses ou de questions et vous devrez utiliser First(), FirstOrDefault(), Single() ou SingleOrDefault() selon vos besoins pour obtenir une réponse ou une question spécifique.

79
Daniel Brückner
from question in Questions
from answer in question.Answers
where answer.Name == something
select question // or select answer
36
ybo

Utilisez SelectMany et First/FirstOrDefault (si vous avez besoin d'une valeur)

List<Questions> questions = //initialization;
var someAnswer = questions.SelectMany(q=>q.Answers)
                          .First(a=>a.Name =="MyName");
7
Mike_G

Il semble que vous pourriez utiliser quelque chose comme ceci:

var query = from q in questions
            from a in q.Answers
            where a.Name == "Answer Name"
            select a;
7
bruno conde