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

如何修改LINQ查询,筛选出含所有目标词片段的ObjectA对象?

解决子字符串匹配的筛选问题

嘿,这个需求很好实现,你只需要调整一下LINQ表达式里的判断逻辑就行~

原来的代码wordsToFind.All(objectA.StringList.Contains)是在检查目标词是否完整出现在StringList中,而我们需要的是目标词是StringList中某元素的子字符串,所以要把Contains的逻辑换成「检查StringList里有没有任意一个字符串包含当前目标词」。

修改后的代码如下:

List<ObjectA> myObjectList;
List<string> wordsToFind;
var result = myObjectList.Where(objectA => 
    wordsToFind.All(targetWord => 
        objectA.StringList.Any(str => str.Contains(targetWord))
    )
);

逻辑解释:

  • wordsToFind.All(...):保证所有目标词都要满足后续的匹配条件
  • objectA.StringList.Any(str => str.Contains(targetWord)):检查当前ObjectA的StringList中,是否存在至少一个字符串str,包含当前目标词targetWord作为子串

用你给的例子验证:当wordsToFind = {"tes","don"},某ObjectA的StringList = {"test", "done"}时:

  • 对于"tes","test".Contains("tes")返回true,所以Any返回true
  • 对于"don","done".Contains("don")返回true,所以Any返回true
  • 所有目标词都满足匹配要求,All返回true,这个ObjectA会被纳入结果集,完全符合你的需求

额外优化(可选):

如果需要忽略大小写匹配(比如"Tes"也能匹配"test"),可以把str.Contains(targetWord)换成:

str.IndexOf(targetWord, StringComparison.OrdinalIgnoreCase) >= 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:02:41