有没有办法将一堆选择器表达式动态投影到一个新的匿名类型中,例如.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;
Name
或Category
成员也是如此。现在我想使用两个选择器将Id
和Name
作为匿名类型返回。
// combined x => x.Id and x => x.Name into x => new { x.Id, x.Name }
return new { IdAccessor, NameAccessor }
但是,我无法动态执行此操作,因为我无法使用例如 Expression.New()
不知道它是实际类型。
编辑
我用一个不同的例子重写了这个问题,应该会澄清更多。
不确定"两个选择器"的真正含义,但这就是我使用匿名类型的方式; 从对象列表中选择特定值时。如果这不是你的意思,请发表评论。
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) { ... }