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

如何使用LINQ将对象列表转为键为属性名的Dictionary<string, List<string>>

使用LINQ将Personne对象列表转换为指定字典类型

给定如下personne类:

public class personne
{
   public string code {get; set;}
   public string ItemName {get;set;}
   public string Adresse {get;set;}
}

我们需要将该类的对象列表转换为Dictionary<string, List<string>>类型的字典,其中字典的键为类的属性名,值为对应属性的所有值组成的字符串列表。

方法一:硬编码实现(性能优先)

如果类的属性固定,直接针对每个属性编写LINQ查询是最直观且高效的方式:

// 示例personne对象列表
List<personne> personneList = new List<personne>
{
    new personne { code = "001", ItemName = "张三", Adresse = "北京" },
    new personne { code = "002", ItemName = "李四", Adresse = "上海" }
};

var resultDict = new Dictionary<string, List<string>>
{
    { nameof(personne.code), personneList.Select(p => p.code).ToList() },
    { nameof(personne.ItemName), personneList.Select(p => p.ItemName).ToList() },
    { nameof(personne.Adresse), personneList.Select(p => p.Adresse).ToList() }
};

方法二:反射+LINQ实现(扩展性优先)

如果需要支持属性动态变化的场景,可以通过反射结合LINQ自动生成字典:

using System.Reflection;

// 示例personne对象列表
List<personne> personneList = new List<personne>
{
    new personne { code = "001", ItemName = "张三", Adresse = "北京" },
    new personne { code = "002", ItemName = "李四", Adresse = "上海" }
};

var resultDict = typeof(personne)
    .GetProperties(BindingFlags.Public | BindingFlags.Instance)
    // 仅筛选string类型属性,避免非字符串属性转换出错
    .Where(prop => prop.PropertyType == typeof(string))
    .ToDictionary(
        prop => prop.Name,
        prop => personneList.Select(p => (string)prop.GetValue(p)).ToList()
    );

两种方式的区别:

  • 硬编码方式代码清晰、执行效率更高,适合属性固定不变的场景。
  • 反射方式无需手动维护每个属性的转换逻辑,当类的属性新增或修改时代码无需调整,但性能略低于硬编码方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:15:35