Подтвердить что ты не робот

Вопрос linq: запрос вложенных коллекций

У меня есть класс Вопрос, который имеет свойство открытого списка, которое может содержать несколько ответов.

У меня есть репозиторий вопросов, который отвечает за чтение вопросов и ответы на них из XML файла.

Итак, у меня есть набор Вопросов (Список) с каждым объектом Вопроса, имеющим коллекцию ответов, и я хотел бы запросить этот сборник Вопросов для ответа (то есть по его имени) с помощью Linq. Я не знаю, как это сделать должным образом.

Я мог бы сделать это с помощью foreach, но я хотел бы знать, есть ли чистый путь Linq, так как я его изучаю.

4b9b3361

Ответ 1

Чтобы найти ответ.

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

Чтобы найти вопрос о ответе.

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

Фактически вы получите подборки ответов или вопросов, и вам придется использовать First(), FirstOrDefault(), Single() или SingleOrDefault() в зависимости от ваших потребностей, чтобы получить один конкретный ответ или вопрос.

Ответ 2

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

Ответ 3

Используйте SelectMany и First/FirstOrDefault (если вам нужно одно значение)

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

Ответ 4

Кажется, вы могли бы использовать что-то вроде этого:

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