Вопрос linq: запрос вложенных коллекций
У меня есть класс Вопрос, который имеет свойство открытого списка, которое может содержать несколько ответов.
У меня есть репозиторий вопросов, который отвечает за чтение вопросов и ответы на них из XML файла.
Итак, у меня есть набор Вопросов (Список) с каждым объектом Вопроса, имеющим коллекцию ответов, и я хотел бы запросить этот сборник Вопросов для ответа (то есть по его имени) с помощью Linq. Я не знаю, как это сделать должным образом.
Я мог бы сделать это с помощью foreach, но я хотел бы знать, есть ли чистый путь Linq, так как я его изучаю.
Ответы
Ответ 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;