如何使用选定字段将 IEnumerable 转换为匿名类型

How to cast IEnumerable to anonymous type with selected fields

所以,我有一些字符串数组:

第 1 列 Column3

我有 class 字段

class A
{
 object Column1;
 object Column2;
 object Column3;
 object Column4;
 object Column5; 
}

现在我有一个 A 对象列表

List<A> ListOfA = new List<A>();

该列表有 N 个元素。

现在,如何将它转换为该数组中的某个对象?并且有 List<NewAnonymous>

我想要 new { Column1 = '', Column3=''} 的列表,但我不知道该数组中会有哪些列。

这可能吗?如果是的话,我在哪里可以找到它。我当然有一些代码,但我认为它无济于事,所以我只是试图解释我想说的话

根据对问题的评论,我建议:

foreach (A a in listOfA)
{
    var t = typeof(A);
    List<object> list = new List<object>();

    foreach (var prop in t.GetProperties())
    {
        list.Add(prop.GetValue(a));

    }
    newListOfA.Add(list);
}

编辑: 如果您更喜欢基于非查询的 LINQ,这里是 EarthEngine 的 LINQ

的扩展
t = typeof(A)
listOfA.SelectMany(o=>t.GetProperties().Select(i=>i.GetValue(o))

与 Murdock 的答案相同,但使用的是纯 LINQ

from a in listOfA
let t = typeof(A)
from prop in t.GetProperties()
select prop.GetValue(a)

我要逆势而行,说你可以通过反思来做到这一点,但你不应该这样做。

为什么?因为现在你有一个匿名类型,你没有 "know" 的属性。你将如何在下游使用它?更多反思?

如果您有未知数量的字段,最好以索引方式(列表或字典)处理它们,而不是反射的沉坑。