Я пытаюсь извлечь список страниц из списка типа книги, где идентификатор страницы соответствует предоставленному значению.
Книга содержит список страниц. Каждая страница имеет идентификатор.
Я просто не могу понять это правильно. Любая помощь очень ценится.
List<Book> books = GetBooks();
Page page = books.Select(x => x.Pages.Where(y => y.PageId == pageId)).Single();





Я думаю, вам нужен 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);
List<Book> books = GetBooks();
IEnumerable<Page> pages = books.SelectMany(x => x.Pages.Where(y => y.PageId == pageId));
Это должно дать вам перечисление страниц с заданным идентификатором. Вам нужно добавить .ToList(), если вы хотите вместо этого список.
Попробуйте SelectMany:
Page page = books.SelectMany(x => x.Pages).Where(x => x.PageId == pageId).FirstOrDefault();
И версия LINQ этого запроса:
from b in books
from p in b.Pages
where p.PageId == pageId
select p
Это хорошо, потому что вы получаете поведение SelectMany, детализируя предложения с помощью from.
Хочешь, чтобы он вернулся
IEnumerable<Page>? Можно ли иметь несколько страниц с одним и тем же идентификатором?