Извлечение списка <Page>из списка <Book>с лямбда-выражением - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь извлечь список страниц из списка книг типа, где идентификатор страницы соответствует предоставленному значению.

Книга содержит список страниц. У каждой страницы есть идентификатор.

Я просто не могу понять это правильно. Любая помощь с благодарностью.

List<Book> books = GetBooks();
Page page = books.Select(x => x.Pages.Where(y => y.PageId == pageId)).Single();

Ответы [ 4 ]

1 голос
/ 13 марта 2019

Попробуйте SelectMany:

Page page = books.SelectMany(x => x.Pages).Where(x => x.PageId == pageId).FirstOrDefault();
1 голос
/ 13 марта 2019

Я думаю, что вы после SelectMany. Это для случаев, когда в книге может быть несколько страниц с указанным pageId:

var pages = books.SelectMany(book => book.Pages.Where(page => page.PageId == pageId));

Однако, если в книге может быть только одна страница с указанным pageId, вы можете захотеть:

var pages = books.Select(book => book.Pages.Single(page => page.PageId == pageId));

Если в книге может быть или не быть страница с указанным pageId, то вы, вероятно, захотите:

var pages = hooks.SelectMany(book => book.Pages).Where(x => x.PageId == pageId);
0 голосов
/ 13 марта 2019

И версия LINQ этого запроса:

from b in books
from p in b.Pages
where p.PageId == pageId
select p

Это хорошо, потому что вы получаете поведение SelectMany, углубляясь в предложения from.

0 голосов
/ 13 марта 2019
List<Book> books = GetBooks();
IEnumerable<Page> pages = books.SelectMany(x => x.Pages.Where(y => y.PageId == pageId));

Это должно дать вам Перечень страниц с указанным идентификатором. Вам нужно добавить .ToList(), если вы хотите список вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...