关于c#:linq问题:查询嵌套集合

linq question: querying nested collections

我有一个问题类,它具有公共列表属性,可以包含多个答案。

我有一个问题库,负责从XML文件中读取问题及其答案。

所以我有一个问题集合(列表),每个问题对象都有一个答案集合,我想通过使用linq来查询这个问题集合的答案(即按名称)。我不知道该怎么做。

我可以用前臂来做,但我想知道,自从我开始学习后,是否有一种纯粹的LINQ方法。


找到答案。

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

找到答案的问题。

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

事实上,你会得到答案或问题的集合,你必须使用First()FirstOrDefault()Single()SingleOrDefault(),这取决于你获得一个特定答案或问题的需要。


1
2
3
4
from question in Questions
from answer in question.Answers
where answer.Name == something
select question // or select answer


你似乎可以用这样的东西:

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

使用selectmany和first/first或默认值(如果需要一个值)

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