LINQ问题:查询嵌套集合

我有一个带有公共List属性的Question类,其中可以包含多个Answers。

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

因此,我有一个问题(列表)集合,每个Question对象都有一个Answers集合,我想使用Linq来查询这个Questions集合以获得一个Answers(即按名称)。 我不知道该怎么做。

我可以用foreach做到这一点,但是我想知道自从我学习以来是否有纯粹的Linq方法。

kitsune asked 2020-02-19T22:47:14Z
4个解决方案
81 votes

寻找答案。

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

寻找答案的问题。

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

实际上,您将获得答案或问题的集合,并且根据需要,您将必须使用First()FirstOrDefault()Single()SingleOrDefault()来获得一个特定的答案或问题。

Daniel Brückner answered 2020-02-19T22:47:41Z
36 votes
from question in Questions
from answer in question.Answers
where answer.Name == something
select question // or select answer
ybo answered 2020-02-19T22:47:56Z
7 votes

使用SelectMany和First / FirstOrDefault(如果您需要一个值)

List<Questions> questions = //initialization;
var someAnswer = questions.SelectMany(q=>q.Answers)
                          .First(a=>a.Name =="MyName");
Mike_G answered 2020-02-19T22:48:16Z
7 votes

看来您可以使用以下方式:

var query = from q in questions
            from a in q.Answers
            where a.Name == "Answer Name"
            select a;
bruno conde answered 2020-02-19T22:48:36Z
translate from https://stackoverflow.com:/questions/721395/linq-question-querying-nested-collections