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
相关产品推荐
相关产品推荐

