如何使用LINQ筛选包含指定Genre的书籍?
LINQ筛选包含特定Genre的书籍问题解决
我有一个Book类型的列表,每本Book包含Title、publishYear、Author属性,还有一个Genres列表(单本书可对应多个Genre),结构示例:
Title = "Hello World", publishYear = 2001, Genres = ["Horror", "Drama"],
需要筛选出包含特定Genre(比如"Horror")的书籍,但初始代码无法得到预期结果:
初始代码:
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));
预期输出是Hello World,但实际无输出。
错误原因分析
All()方法的逻辑是:只有当集合中所有元素都满足条件时才返回true。这里目标书籍的Genres包含"Horror"和"Romance",显然不是所有元素都是"Horror",所以这条书籍不会被筛选出来。
修正方案
将All()替换为Any()方法,Any()的逻辑是:只要集合中存在至少一个元素满足条件就返回true,完全符合"包含特定Genre"的需求。
修正后的代码:
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.Any(y => y == "Horror")).ToList(); genreBooks.ForEach(book => Console.WriteLine(book.Title));
运行后将正确输出:
Hello World
内容的提问来源于stack exchange,提问作者Christofer Carlsson
相关产品推荐
相关产品推荐

