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

C#使用Lambda表达式筛选生成同结构Dictionary的方法

实现目标

现有类型定义如下:

public class EquipmentRow
{
    public string Model { get; set; }
    public bool New { get; set; }
}

// 原字典属性
public Dictionary<string, List<EquipmentRow>> TableRows { get; set; }

需要生成结构完全一致的新字典,仅保留每个列表中New属性值为true的EquipmentRow对象。

正确Lambda实现

你之前的写法只完成了半段逻辑,需要通过ToDictionary方法重构为字典类型,完整写法如下:

var newLocationDevices = locationDevices
    .ToDictionary(
        kvp => kvp.Key,
        kvp => kvp.Value.Where(row => row.New).ToList()
    );
逻辑说明
  • 调用ToDictionary是为了保证返回结果和原字典结构完全一致,类型仍为Dictionary<string, List<EquipmentRow>>
  • 键选择器直接复用原字典的键,保证键和原数据一一对应
  • 值选择器对内层的设备列表做筛选,仅保留New为true的条目,最后调用ToList()匹配原字典的值类型List<EquipmentRow>

可选调整:移除无有效条目的键

如果不需要保留筛选后列表为空的键,可以再加一层过滤:

var newLocationDevices = locationDevices
    .Select(kvp => new KeyValuePair<string, List<EquipmentRow>>(
        kvp.Key,
        kvp.Value.Where(row => row.New).ToList()
    ))
    .Where(kvp => kvp.Value.Count > 0)
    .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 19:09:52