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

如何用LINQ过滤包含所有选中Filter文本的父实体(C#/Blazor Server)

LINQ筛选包含所有指定标签的父实体

核心逻辑

要筛选出子实体包含所有选中过滤文本的父实体,正确思路是:先提取所有选中的过滤文本,再检查每个父实体的子实体集合是否覆盖了所有这些文本。

实现代码

// 提取选中的过滤文本集合
var selectedFilterTexts = Filters.Where(f => f.Selected).Select(f => f.Text).ToList();

// 核心筛选逻辑
var filteredParents = Parents.Where(parent => 
    // 确保每一个选中的过滤文本,都能在当前父的子实体中找到匹配项
    selectedFilterTexts.All(filterText => 
        parent.Child.Any(child => child.Text == filterText)
    )
).ToList();

逻辑说明

  • selectedFilterTexts.All(...):遍历每一个选中的过滤文本,要求所有文本都必须在父实体的子集合中找到对应项
  • parent.Child.Any(...):检查当前父实体是否存在至少一个子实体的Text与当前过滤文本匹配

测试场景验证

针对你的测试数据:

  1. 仅选中"C#"时:selectedFilterTexts = ["C#"],三个父实体的子集合都包含"C#",因此返回全部3个父实体。
  2. 选中"C#"和"Pascal"时:selectedFilterTexts = ["C#", "Pascal"],Parent1和Parent2的子集合同时包含这两个文本,Parent3缺少"Pascal",因此仅返回Parent1和Parent2,完全符合需求。

之前方案的问题分析

  1. 你最初的尝试:w.Text.Contains(z => ...)用法错误,string.Contains仅接受字符串参数,不能传入lambda表达式,逻辑完全不成立。
  2. 参考的方案:i.Children.All(w => ...)逻辑倒置,它要求父实体的所有子实体Text都属于选中的过滤文本,这和你需要的"父实体包含所有过滤文本"完全相反。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:15:36