web-dev-qa-db-ja.com

linqの質問:ネストされたコレクションのクエリ

複数の回答を含むことができるpublic Listプロパティを持つQuestionクラスがあります。

質問とその回答をxmlファイルから読み取る責任がある質問リポジトリがあります。

だから私は質問(リスト)のコレクションを持っており、各質問オブジェクトには回答のコレクションがあります。そして、Linqを使用してこの質問のコレクション(名前で)を照会したいと思います。これを適切に行う方法がわかりません。

私はforeachでそれをすることができましたが、私はそれを学んでいるので、純粋なLinqの方法があるかどうか知りたいです。

45
kitsune

答えを見つけるため。

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

答えの質問を見つけるため。

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

実際には、回答または質問のコレクションを取得し、First()FirstOrDefault()Single()、またはSingleOrDefault()を使用する必要があります1つの特定の回答または質問を取得する必要があります。

79
from question in Questions
from answer in question.Answers
where answer.Name == something
select question // or select answer
36
ybo

SelectManyとFirst/FirstOrDefaultを使用します(1つの値が必要な場合)

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

このようなものを使用できるようです:

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