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

C# Linq实现数据过滤:排除状态为0及对应Val值所有关联行

实现思路
  • 首先提取所有Status为0的Val值,构建去重的黑名单集合
  • 过滤原数据集,仅保留Val不在黑名单中的条目即可:只要Val不在黑名单中,就代表该Val对应的所有条目Status都为1,天然满足第一条剔除Status为0行的规则
代码实现

首先定义对应数据结构:

public class DataItem
{
    public int Val { get; set; }
    public int Param { get; set; }
    public int Status { get; set; }
}

过滤逻辑代码:

// 模拟原始数据集
List<DataItem> originalData = new List<DataItem>
{
    new DataItem{ Val = 1, Param = 100, Status = 1 },
    new DataItem{ Val = 2, Param = 100, Status = 1 },
    new DataItem{ Val = 3, Param = 100, Status = 1 },
    new DataItem{ Val = 4, Param = 100, Status = 1 },
    new DataItem{ Val = 5, Param = 100, Status = 1 },
    new DataItem{ Val = 3, Param = 200, Status = 0 },
    new DataItem{ Val = 5, Param = 200, Status = 0 },
};

// 构建Val黑名单:所有出现过Status=0的Val值,用HashSet提升查找效率
var forbiddenVals = originalData
    .Where(item => item.Status == 0)
    .Select(item => item.Val)
    .ToHashSet();

// 执行过滤得到结果
var filteredData = originalData
    .Where(item => !forbiddenVals.Contains(item.Val))
    .ToList();

如果偏好查询表达式写法也可以用以下形式:

var filteredData = from item in originalData
                   where !forbiddenVals.Contains(item.Val)
                   select item;
结果验证

最终得到的filteredData内容完全匹配需求:

ValParamStatus
11001
21001
41001

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:15:06