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

C# 如何使用LINQ的Select方法按动态属性列表选取指定属性

首先明确:C#的匿名类型属于静态类型,结构必须在编译阶段确定,所以如果你的属性列表props是只有运行时才能知道内容的动态列表,无法直接生成符合要求的匿名对象列表,我们可以用动态类型实现同等使用效果。

场景1:props列表内容编译时可确定

如果你的props是固定值(比如示例中固定就是FirstName和Age两个属性),直接手动构造匿名对象即可,这是性能最优、最简单的方案:

var result = persons.Select(p => new 
{
    p.FirstName,
    p.Age
}).ToList();

场景2:props列表运行时动态变化

如果props的内容是运行时动态传入的,需要按字符串动态读取属性,我们可以通过反射结合ExpandoObject实现:

var result = persons.Select(p => 
{
    // 用ExpandoObject存储动态属性
    dynamic dynamicObj = new ExpandoObject();
    var propertyDict = dynamicObj as IDictionary<string, object>;

    foreach (var propName in props)
    {
        // 反射获取Person对应属性的值
        var property = typeof(Person).GetProperty(propName);
        if (property != null)
        {
            propertyDict[propName] = property.GetValue(p);
        }
    }

    return dynamicObj;
}).ToList();

说明

返回的结果是List<dynamic>类型,你可以像访问普通对象一样直接读取属性值,比如var name = result[0].FirstName完全可以正常执行,符合使用需求。

内容的提问来源于stack exchange,提问作者Mihai Alexandru-Ionut

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:15:03