我有一个Question类,它有公共List属性,可以包含几个Answers.
我有一个问题库,负责从xml文件中读取问题及其答案.
所以我有一个问题(列表)的集合,每个问题对象都有一个答案集合,我想通过使用Linq查询这个问题集合的答案(即其名称).我不知道如何正确地做到这一点.
我可以用foreach做这件事,但我想知道自从我学习它以来是否有纯粹的Linq方式.
找到答案.
questions.SelectMany(q => q.Answers).Where(a => a.Name == "SomeName")
找到答案的问题.
questions.Where(q => q.Answers.Any(a => a.Name == "SomeName"))
事实上,你会得到答案或问题的集合,你将不得不使用First()
,FirstOrDefault()
,Single()
,或SingleOrDefault()
根据您的需要得到一个明确的答案或问题.
from question in Questions from answer in question.Answers where answer.Name == something select question // or select answer
使用SelectMany和First/FirstOrDefault(如果您需要一个值)
Listquestions = //initialization; var someAnswer = questions.SelectMany(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;