如何从存储逗号分隔字符串的VersionKeys模型中筛选含指定Key的项?
问题分析与修正
你当前的代码逻辑存在错误,导致无法正确筛选出包含指定Key的记录。原代码的Where条件是检查整个列表的keys字符串集合中是否存在等于目标Key的项,而非检查单个记录的keys字符串中是否包含目标Key,且未处理逗号分割的单个Key精确匹配问题。
修正方案
要准确筛选出包含指定单个Key的记录,需要将每个记录的keys字符串按逗号分割为单个Key的集合,再判断该集合是否包含目标Key。
修正后的完整代码
using System; using System.Linq; using System.Collections.Generic; public class Program { public static void Main() { List<VersionKeys> VersionKeysList = new List<VersionKeys> { new VersionKeys { Id = 1, keys = "A,b,c,d" }, new VersionKeys { Id = 2, keys = "d" }, }; string targetKey = "c"; // 筛选逻辑:分割当前记录的keys,检查是否包含目标Key var matchedKeys = VersionKeysList .Where(item => item.keys.Split(',').Contains(targetKey)) .Select(item => item.keys) .FirstOrDefault(); Console.WriteLine(matchedKeys); // 输出:A,b,c,d } } public class VersionKeys { public int Id { get; set; } public string keys { get; set; } }
关键修正点
- 变量命名优化:将原列表名
VersionKeys改为VersionKeysList,避免与类名冲突,提升代码可读性。 - 筛选逻辑修正:使用
item.keys.Split(',')将逗号分隔的字符串拆分为单个Key的数组,再用Contains(targetKey)检查是否包含目标Key,确保是精确匹配单个Key。 - 链式调用调整:先通过
Where筛选符合条件的对象,再通过Select提取keys字段,逻辑更清晰。
如果需要忽略大小写匹配(比如匹配"C"也能找到"A,b,c,d"),可以修改判断逻辑:
.Where(item => item.keys.Split(',').Any(key => key.Equals(targetKey, StringComparison.OrdinalIgnoreCase)))
内容的提问来源于stack exchange,提问作者Jefferson
相关产品推荐
相关产品推荐

