通过选择器表达式创建匿名类型

时间:2015-01-20 08:52:46

标签: c# linq dynamic lambda expression

有没有办法将一堆选择器表达式动态地投影到一个新的匿名类型中,该类型可用于例如.Select()语句或组合成员访问器?

我们说我有一个有3个属性的课程

public class DummyClass {

    public int Id { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }

}

为了使用成员访问器访问其中一个,我可以这样写:

public class DummyClass...
    // x => x.Id
    public static Expression<Func<DummyClass, int>> IdAccessor = f => Id;

NameCategory成员同样如此。现在,我想使用两个选择器将IdName作为匿名类型返回。

// combined x => x.Id and x => x.Name into x => new { x.Id, x.Name }
return new { IdAccessor, NameAccessor }

但是,由于我无法使用例如创建匿名类型,因此我无法动态执行此操作。 Expression.New()我不知道它的实际类型。


修改

我用一个不同的例子重写了这个问题,这个例子应该澄清一些。

1 个答案:

答案 0 :(得分:0)

不确定“两个选择器”的真正含义,但这就是我如何使用匿名类型;从对象列表中选择特定值时。 如果这不是你的意思,请评论。

var myDummies = new List<DummyClass> ...

var result = myDummes.Select(o => new 
{ 
    IdAccessor = o.Id, 
    NameAccessor = o.Name
    Header = String.Format("{0} ({1})", o.Name, o.Category)
});

foreach(var r in result) { ... }