linq question: querying nested collections

To find an answer.

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

To find the question of an answer.

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

In fact you will get collections of answers or questions and you will have to use First(), FirstOrDefault(), Single(), or SingleOrDefault() depending on your needs to get one specific answer or question.


from question in Questions
from answer in question.Answers
where answer.Name == something
select question // or select answer

Use the SelectMany and First/FirstOrDefault (if you are needing one value)

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

It seems you could use something like this:

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