我试图从类型Book的列表中提取页面列表,其中页面ID与提供的值匹配。
一本书包含一个页面列表。每个页面都有一个Id。
我似乎无法做对。 …
我想你是在追求 SelectMany 。这是因为如果书中有多个页面可以有给定的页面 pageId :
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);
尝试 SelectMany :
Page page = books.SelectMany(x => x.Pages).Where(x => x.PageId == pageId).FirstOrDefault();
List<Book> books = GetBooks(); IEnumerable<Page> pages = books.SelectMany(x => x.Pages.Where(y => y.PageId == pageId));
这应该给你一个具有给定id的页面的枚举。你需要添加 .ToList() 如果你想要一个列表。
.ToList()
该查询的LINQ版本是:
from b in books from p in b.Pages where p.PageId == pageId select p
这很好,因为你得到了 SelectMany 钻井的行为 from 条款。
from