linq вопрос: запрос вложенных коллекций - PullRequest
45 голосов
/ 06 апреля 2009

У меня есть Вопрос класс, который имеет публичное свойство List, которое может содержать несколько Ответов .

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

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

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

Ответы [ 4 ]

78 голосов
/ 06 апреля 2009

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

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

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

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

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

36 голосов
/ 06 апреля 2009
from question in Questions
from answer in question.Answers
where answer.Name == something
select question // or select answer
7 голосов
/ 06 апреля 2009

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

var query = from q in questions
            from a in q.Answers
            where a.Name == "Answer Name"
            select a;
7 голосов
/ 06 апреля 2009

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

List<Questions> questions = //initialization;
var someAnswer = questions.SelectMany(q=>q.Answers)
                          .First(a=>a.Name =="MyName");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...