使用LINQ通过Properties / reflection将单个对象转换为IEnumerable?

时间:2014-11-24 17:20:54

标签: c# linq transform

我有一个像这样的简单对象:

public class Foo {
    public int One { get; set; }
    public int Two { get; set; }
    ....
    public int Eleven { get; set; }
} 

给定一个IEnumerable,我想要的是一个LINQ方法来进行转换:

myFooEnumerable.Select(n => transformMagicGoesHere);

我的返回对象如下所示:

public class Bar {
    public string DurationDescription {get;set;} //Value would be "One" or "Two" or ...
    public int Value {get;set;} //Holds value in the property One or Two or ...
}

因此,对于上例中myFooEnumerable中的每个项目N,我会在我的结果选择语句中得到11(N)个项目。

1 个答案:

答案 0 :(得分:2)

这应该这样做:

var bars = myFooEnumerable.SelectMany(
    x => x.GetType().GetProperties().Select(p => new Bar {
        DurationDescription = p.Name,
        Value = (int)p.GetValue(x)
    }));

首先,IMO并不是一件好事,但它至少会起作用。