如何筛选Code属性包含指定字符的对象列表?
解决Code属性包含指定子串的对象筛选问题
你的问题出在判断逻辑搞反了:Letters.Contains(x.Code)是在检查x.Code是否完全等于Letters集合中的某一个元素,而不是x.Code是否包含集合里的任意一个子串。
要实现你想要的筛选效果,应该用Any()方法遍历Letters集合,检查每个元素是否是当前对象Code属性的子串,代码如下:
var Results = MyObjects.FindAll(x => Letters.Any(letter => x.Code.Contains(letter)));
代码解释
Any()会逐个检查Letters里的每个元素,只要有一个元素满足x.Code.Contains(letter)(即该元素是Code的子串),就会返回true,对应的对象就会被保留到结果集合中。- 结合你的示例数据验证:
- ID 0的
Code=ABCD包含'A' → 符合条件 - ID 1的
Code=LMNO包含'M' → 符合条件 - ID 2的
Code=ARDQ包含'A' → 符合条件 - ID 4的
Code=PQRD不包含'A'、'M'或'DQ' → 被排除
完全匹配你预期的结果。
- ID 0的
额外补充:不区分大小写的筛选
如果你的场景需要忽略大小写(比如Code是abcd也想匹配'A'),可以用IndexOf配合忽略大小写的参数替代Contains:
var Results = MyObjects.FindAll(x => Letters.Any(letter => x.Code.IndexOf(letter, StringComparison.OrdinalIgnoreCase) >= 0));
内容的提问来源于stack exchange,提问作者malt_man
相关产品推荐
相关产品推荐

