当前位置:  开发笔记 > 编程语言 > 正文

linq问题:查询嵌套集合

如何解决《linq问题:查询嵌套集合》经验,为你挑选了4个好方法。

我有一个Question类,它有公共List属性,可以包含几个Answers.

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

所以我有一个问题(列表)的集合,每个问题对象都有一个答案集合,我想通过使用Linq查询这个问题集合的答案(即其名称).我不知道如何正确地做到这一点.

我可以用foreach做这件事,但我想知道自从我学习它以来是否有纯粹的Linq方式.



1> Daniel Brück..:

找到答案.

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(q => q.Answers.Select(a => new {A = a,Q = q}).其中(qa => qa.A.Name =="SomeName")会更合适.

2> ybo..:
from question in Questions
from answer in question.Answers
where answer.Name == something
select question // or select answer



3> Mike_G..:

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

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



4> bruno conde..:

看来你可以使用这样的东西:

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

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有