如何用C# LINQ将匹配关键词存入列表对象的KeywordMatched属性?
实现匹配关键词存入KeywordMatched属性的方法
假设你的基础类结构如下:
public class CsvLogData { public string SiteUrl { get; set; } public string SiteTitle { get; set; } public string KeywordMatched { get; set; } // 若需存储多个匹配关键词,可改为List<string> } public static class CsvList { public static List<CsvLogData> Logs { get; set; } = new List<CsvLogData>(); public static List<CsvLogData> FilterList(List<string> keywords) { // 在此实现过滤与关键词赋值逻辑 } }
场景1:存储第一个匹配的关键词
遍历日志列表,检查每个项的SiteUrl或SiteTitle是否包含关键词列表中的任意关键词,找到第一个匹配项后赋值给KeywordMatched,并加入过滤结果:
public static List<CsvLogData> FilterList(List<string> keywords) { var filteredResults = new List<CsvLogData>(); foreach (var logItem in Logs) { // 按需求调整匹配规则(示例为忽略大小写的包含匹配) var firstMatchedKeyword = keywords.FirstOrDefault(keyword => logItem.SiteUrl.Contains(keyword, StringComparison.OrdinalIgnoreCase) || logItem.SiteTitle.Contains(keyword, StringComparison.OrdinalIgnoreCase)); if (firstMatchedKeyword != null) { logItem.KeywordMatched = firstMatchedKeyword; filteredResults.Add(logItem); } } return filteredResults; }
场景2:存储所有匹配的关键词
如果需要保留所有匹配的关键词,先修改CsvLogData的KeywordMatched为集合类型,再收集所有匹配项:
// 修改CsvLogData类 public class CsvLogData { public string SiteUrl { get; set; } public string SiteTitle { get; set; } public List<string> KeywordsMatched { get; set; } = new List<string>(); } // 更新FilterList方法 public static List<CsvLogData> FilterList(List<string> keywords) { var filteredResults = new List<CsvLogData>(); foreach (var logItem in Logs) { var allMatchedKeywords = keywords.Where(keyword => logItem.SiteUrl.Contains(keyword, StringComparison.OrdinalIgnoreCase) || logItem.SiteTitle.Contains(keyword, StringComparison.OrdinalIgnoreCase)).ToList(); if (allMatchedKeywords.Any()) { logItem.KeywordsMatched = allMatchedKeywords; filteredResults.Add(logItem); } } return filteredResults; }
注意事项
- 匹配规则可按需调整:比如精确匹配、正则匹配等,替换示例中的
Contains逻辑即可 - 若不想修改原
Logs列表中的对象,可创建CsvLogData的副本(如通过构造函数或对象初始化器)后再赋值关键词 - 如果
KeywordMatched必须为字符串类型,多个匹配关键词可通过string.Join(", ", allMatchedKeywords)拼接后赋值
内容的提问来源于stack exchange,提问作者Kshitij Gupta
相关产品推荐
相关产品推荐

