Accepted answer

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.


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;


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

More Query from same tag