You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:37:13