如何使用 LINQ 从另一个列表中的列表中进行过滤?

问题描述 投票:0回答:1

好吧,所以这很难解释,但我会尽力的。

我有一个装满书籍的清单。 所有书籍都有标题、发布年份和作者等变量。 但他们也有流派,这就是让我有点困惑的地方。 因为每本书都可以有多个类型,所以我将类型单独列出。 所以每本书的结构都是这样的。

Title = "Hello World",
publishYear = 2001,
Genres = ["Horror", "Drama"],

现在,我想使用 LINQ 在特定类型之后进行过滤,因此,如果用户想要在“恐怖”之后进行过滤,那么只会显示那些内容。 但由于它们在自己的列表中,所以我遇到了一些小问题。 据我所知。 这是我所涉及的代码片段的快速重现。

List<Book> allBooks = new List<Book>();

allBooks.Add(new Book("Hello World", "Tom Burt", 2009, ["Horror", "Romance"] ));
allBooks.Add(new Book("Hello World 2", "Robert Burt", 2004, ["Comedy", "Romance"] ));

var genreBooks = allBooks.Where(x => x.Genres.All(y => y == "Horror")).ToList();
genreBooks.ForEach(book => Console.WriteLine(book.Title));

//预期结果

世界你好

//实际结果

编辑: 只需将 All 更改为 Any 即可解决! 谢谢你的帮助:)

c# list linq
1个回答
0
投票

只需将 All 更改为 Any 即可解决! 谢谢您的帮助!

var genreBooks = allBooks.Where(x => x.Genres.All(y => y == "Horror")).ToList();

成为

var genreBooks = allBooks.Where(x => x.Genres.Any(y => y == "Horror")).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.