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

如何用LINQ从对象列表的嵌套集合中筛选label=1的数据?

问题描述

现有如下结构的JSON数据,需要借助LINQ筛选出仅包含label=1的子数据,要求最终返回的结构与原数据完全一致——比如areaId=3的对象保留全部2条符合条件的data,areaId=4的对象只保留1条label=1的data。

原始数据:

[
  {
    "_id": "",
    "at": "2022-11-19T10:00:00",
    "areaId": 3,
    "data": [
      {
        "label": 1,
        "name": "a",
        "sec": 34,
        "x": 10.3,
        "y": 23.3
      },
      {
        "label": 1,
        "name": "a",
        "sec": 36,
        "x": 10.3,
        "y": 23.3
      }
      ]
  },
  {
    "_id": "",
    "at": "2022-11-19T10:01:00",
    "areaId": 4,
    "data": [
      {
        "name": "a",
        "label": 1,
        "sec": 10,
        "x": 10.3,
        "y": 23.3
      },
      {
        "label": 2,
        "name": "b",
        "sec": 12,
        "x": 10.3,
        "y": 23.3
      }
      ]
  }
]
实现方案

1. 定义对应实体类

首先需要在C#环境下定义与数据结构匹配的实体类,用于强类型处理:

// 子数据实体
public class ItemData
{
    public int label { get; set; }
    public string name { get; set; }
    public int sec { get; set; }
    public double x { get; set; }
    public double y { get; set; }
}

// 父数据实体
public class AreaRecord
{
    public string _id { get; set; }
    public DateTime at { get; set; }
    public int areaId { get; set; }
    public List<ItemData> data { get; set; }
}

2. 编写LINQ筛选逻辑

通过LINQ遍历原始数据,对每个父对象的data集合进行过滤,同时保留其他属性不变:

// 假设原始数据已反序列化为List<AreaRecord> originalData
var filteredData = originalData
    .Select(record => new AreaRecord
    {
        _id = record._id,
        at = record.at,
        areaId = record.areaId,
        // 仅保留data中label等于1的子项
        data = record.data.Where(item => item.label == 1).ToList()
    })
    // 可选:如果需要剔除过滤后data为空的父对象,取消下方注释
    // .Where(record => record.data.Any())
    .ToList();

这段代码的核心逻辑是:用Select重新构造每个父对象,复制除data外的所有属性,同时用Where筛选data集合中符合label=1的子项,最终返回结构与原数据完全一致的筛选结果。

内容的提问来源于stack exchange,提问作者Mehmet Serkan Ekinci

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:05:22