You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅过滤IEnumerable<object>:移除字符串属性含List<string>元素的对象

优雅的Linq过滤解决方案

嘿,我懂你想要摆脱繁琐循环、用更简洁方式实现过滤的需求——用Linq就能轻松搞定!

先明确下场景:假设你的自定义对象长这样(我先给个示例类,方便你对应自己的对象):

public class CustomItem
{
    public string TargetProperty { get; set; } // 你要检查的字符串属性
    // 其他自定义属性...
}

你的原始集合是IEnumerable<CustomItem>,过滤列表是List<string> filterTerms,目标是移除所有TargetProperty包含filterTerms中任意值的对象。

替代循环的Linq方案

直接用Where结合Any的取反逻辑就能实现,代码非常简洁:

var filteredCollection = originalCollection
    .Where(item => !filterTerms.Any(term => item.TargetProperty.Contains(term)));

补充:忽略大小写的匹配

如果你的场景不需要区分大小写(比如"test"和"Test"视为相同),可以给Contains加上字符串比较参数:

var filteredCollection = originalCollection
    .Where(item => !filterTerms.Any(term => 
        item.TargetProperty.Contains(term, StringComparison.OrdinalIgnoreCase)));

为什么这个方案更优雅?

  • 采用声明式编程:你只需要描述“要保留什么样的对象”,而不用手动写循环、临时列表的操作逻辑
  • 代码更紧凑易读,链式调用的结构清晰表达了过滤逻辑
  • 不需要额外创建临时集合存储中间结果,Linq会延迟执行,性能也有保障

如果你的原始集合是JSON格式,只需要先把它反序列化成IEnumerable<CustomItem>(比如用Newtonsoft.Json或System.Text.Json),上面的代码就完全适用啦。

内容的提问来源于stack exchange,提问作者Jessie Cryer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:52:49