如何使用LINQ在指定字符串列表中查找包含目标字符串的对象
用LINQ查找包含指定字符串的对象指南
没问题,我来帮你搞定用LINQ查找包含指定字符串的对象这件事!先假设你的Author类大概是这样的(因为你没贴全,我补个常见的结构方便演示):
public class Author { public string Name { get; set; } public List<string> Books { get; set; } }
咱们分两种常见场景来写代码:
1. 从单个字符串列表中筛选包含指定字符串的元素
比如你想从BookListNo1里找出标题包含某个关键词的书籍,代码如下:
// 定义要查找的目标字符串 string searchKeyword = "the"; // 筛选包含指定字符串的书籍(忽略大小写) var matchingBooks = BookListNo1.Where(book => book.Contains(searchKeyword, StringComparison.OrdinalIgnoreCase)); // 如果需要区分大小写,直接用下面这行 // var matchingBooks = BookListNo1.Where(book => book.Contains(searchKeyword));
解释一下:
Where是LINQ的过滤方法,用来留下符合条件的元素Contains方法判断字符串是否包含目标子串,加上StringComparison.OrdinalIgnoreCase参数可以忽略大小写,避免因为大小写差异漏掉结果
2. 从Author列表中筛选出拥有符合条件书籍的作者
如果你想从MyAuthorList里找出那些写过包含指定字符串书籍的作者,代码会稍微嵌套一点:
string searchKeyword = "the"; // 查找至少有一本书包含指定字符串的作者 var matchingAuthors = MyAuthorList.Where(author => author.Books.Any(book => book.Contains(searchKeyword, StringComparison.OrdinalIgnoreCase)));
这里的Any方法用来判断作者的书籍列表里是否存在至少一本符合条件的书,配合外层的Where就能筛选出我们要的作者对象。
完整示例代码
把初始化和查询整合起来,你可以直接运行看效果:
// 先定义你的书籍列表 List<string> BookListNo1 = new List<string>() { "The Girl with the Dragon Tattoo", "The Name of the Rose", "The Alienist", "In Cold Blood", "The Firm" }; List<string> BookListNo2 = new List<string>() { "And Then There Were None", "Mystic River", "The Shadow of the Wind", "Angels & Demons" , "The Big Sleep", "The Pelican Brief" }; // 假设BookListNo3的内容 List<string> BookListNo3 = new List<string>() { "The Hobbit", "The Lord of the Rings", "The Silmarillion" }; // 初始化作者列表 List<Author> MyAuthorList = new List<Author>() { new Author { Name = "Stieg Larsson", Books = BookListNo1 }, new Author { Name = "Agatha Christie", Books = BookListNo2 }, new Author { Name = "J.R.R. Tolkien", Books = BookListNo3 } }; // 执行查询 string searchTerm = "the"; var resultAuthors = MyAuthorList.Where(a => a.Books.Any(b => b.Contains(searchTerm, StringComparison.OrdinalIgnoreCase))); // 输出结果 foreach (var author in resultAuthors) { Console.WriteLine($"📚 作者:{author.Name}"); Console.WriteLine("符合条件的书籍:"); foreach (var book in author.Books.Where(b => b.Contains(searchTerm, StringComparison.OrdinalIgnoreCase))) { Console.WriteLine($" - {book}"); } Console.WriteLine(); }
小提示
- 如果你的字符串比较需要考虑文化地域差异(比如某些语言的特殊大小写规则),可以把
StringComparison.OrdinalIgnoreCase换成StringComparison.CurrentCultureIgnoreCase或者StringComparison.InvariantCultureIgnoreCase - 如果要找完全匹配目标字符串的元素,直接用
book == searchKeyword(加上比较规则即可),不用Contains
内容的提问来源于stack exchange,提问作者Happy Coconut
相关产品推荐
相关产品推荐

