C# linq问题:查询嵌套集合

C# linq问题:查询嵌套集合,c#,.net,linq,collections,linq-to-xml,C#,.net,Linq,Collections,Linq To Xml,我有一个问题类,该类具有公共列表属性,可以包含多个答案 我有一个问题库,负责从xml文件中读取问题及其答案 因此,我有一个问题集合(列表),每个问题对象都有一个答案集合,我想使用Linq查询这个问题集合以获得答案(即通过其名称)。我不知道该怎么做 我可以用foreach来做,但我想知道,既然我在学习,是否有一种纯粹的Linq方法。来寻找答案 from question in Questions from answer in question.Answers where answer.Name =

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

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

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

我可以用foreach来做,但我想知道,既然我在学习,是否有一种纯粹的Linq方法。

来寻找答案

from question in Questions
from answer in question.Answers
where answer.Name == something
select question // or select answer
questions.SelectMany(q => q.Answers).Where(a => a.Name == "SomeName")
questions.Where(q => q.Answers.Any(a => a.Name == "SomeName"))
找到答案的问题

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

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

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

列出问题=//初始化;
var someAnswer=问题。选择多个(q=>q.Answers)
.First(a=>a.Name==“MyName”);

您似乎可以使用以下内容:

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

您是在寻找与给定问题相关的答案,还是寻找可能与任何问题相关的特定答案?我希望这些问题会被保留,所以更像:。。。SelectMany(q=>q.Answers.Select(a=>new{a=a,q=q})。其中(qa=>qa.a.Name==“SomeName”)更合适。你总是可以带着答案回到问题。问题-不需要引入匿名类型。@danbruc:QQ中没有列出这样的属性你是对的!我想到了一些ORM,但问题只提到一个类。这就是我要找的。