ASP.NET Core MVC:基于逗号分隔值的包含条件校验问题求助
问题分析与修复
你的代码有两个核心问题导致无结果返回:
- 逻辑判断错误:使用
classificationCodes.All(...)意味着要求当前Result的ClassificationCode必须同时包含所有分类代码(即同时包含"C"和"R"),这显然不符合你"校验数值是否存在于数组中"的需求。 - 字符串分割后存在空格:
"C, R".Split(",")会生成带前导空格的元素["C", " R"],如果ClassificationCode的值是无空格的"R",Contains会匹配失败。
修复后的代码
private List<Result> FilterbyClassification(List<Result> results) { // 分割后去除每个元素的前后空格,避免匹配失败 var classificationCodes = "C, R".Split(",").Select(c => c.Trim()).ToList(); // 使用Any替代All:只要ClassificationCode包含任意一个目标分类代码即保留 return results.Where(f => classificationCodes.Any(code => f.ClassificationCode.Contains(code))).ToList(); }
扩展优化:支持单个/多个传入参数
如果需要动态接收单个或多个分类代码(而不是硬编码),可以修改方法参数让逻辑更通用:
// 支持传入单个字符串(如"C")或逗号分隔字符串(如"C,R") private List<Result> FilterbyClassification(List<Result> results, string classificationCodeInput) { var classificationCodes = classificationCodeInput.Split(",") .Select(c => c.Trim()) .Where(c => !string.IsNullOrWhiteSpace(c)) // 过滤空值 .ToList(); // 如果没有传入有效分类代码,直接返回原列表(或根据需求返回空) if (!classificationCodes.Any()) return results; return results.Where(f => classificationCodes.Any(code => f.ClassificationCode.Contains(code))).ToList(); }
补充说明
- 如果你需要精确匹配(而非包含匹配),把
f.ClassificationCode.Contains(code)改成f.ClassificationCode.Equals(code, StringComparison.OrdinalIgnoreCase)(按需忽略大小写)。 - 如果
ClassificationCode是数组类型(而非字符串),则逻辑改为classificationCodes.Any(code => f.ClassificationCode.Contains(code))(此时调用的是数组的Contains方法)。
内容的提问来源于stack exchange,提问作者matrixnew
相关产品推荐
相关产品推荐

