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

在.NET CORE 6中使用LINQ将字典列表转换为强类型对象列表

LINQ实现字典到强类型对象列表转换方案

直接使用LINQ的Where做非空过滤、Select做对象投影,最后调用ToList()即可得到目标List<AIMSchema>集合,逻辑和你原来的foreach循环完全一致,执行效率没有明显差异。

基础实现代码

// 不需要提前生成filteredDictionary,直接从源字典转换即可
List<AIMSchema> aimSchemaList = dataDictionary.Values
    // 过滤空字典元素,对应原循环里的if(schema != null)判断
    .Where(schema => schema != null)
    .Select(schema => new AIMSchema
    {
        TransactionDate = schema[0],
        MachineCode = schema[1],
        // 按序号顺序补全剩余15个属性的映射即可,赋值规则和原foreach内的写法完全一致
        // 示例:
        // BizType = schema[2],
        // Amount = schema[3],
        // ... 直到schema[16]对应最后一个属性
    })
    .ToList();

如果你已经提前生成了filteredDictionary变量,只需要把上述代码里的dataDictionary.Values替换为filteredDictionary即可。

可选优化点

  • 容错处理:如果不确定字典里是否存在对应序号的键,可改用GetValueOrDefault方法避免抛出KeyNotFoundException,示例:TransactionDate = schema.GetValueOrDefault(0),找不到键时会返回string类型默认值null。
  • 类型转换:如果AIMSchema的属性存在非string类型(比如TransactionDate是DateTime、金额属性是decimal),直接在投影赋值时添加转换逻辑即可,示例:
    TransactionDate = DateTime.Parse(schema[0]),
    TransAmount = decimal.TryParse(schema[3], out var amount) ? amount : 0m,
    
  • 这种硬编码序号映射的方式比反射、表达式树动态映射的性能更高,完全满足.NET 6环境下的生产使用要求。

内容的提问来源于stack exchange,提问作者K.Z

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 21:24:30