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

时间:2015-03-03 10:52:15

标签: c# linq casting ienumerable

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

column1的 栏3

我有课程

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=''}但我永远不知道该数组中的列。

这甚至可能吗?如果是,我可以寻找它。我有一些代码,但我认为它不会有帮助,所以我只想解释我想说的话

3 个答案:

答案 0 :(得分:2)

基于对我提出的问题的评论:

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))

答案 1 :(得分:1)

与默多克的答案相同,但纯粹的LINQ

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

答案 2 :(得分:1)

我会逆转目前的趋势并说你可以通过反思这样做,但你不应该这样做。

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

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