添加属性而不命名Linq的现有属性

时间:2015-05-31 08:49:36

标签: c# .net linq

Linq中我们如何在不提及其他现有属性的情况下添加新属性。

例如,我们有班级MyClass

public class MyClass
{
   public int P1 {get; set;}
   public int P2 {get; set;}
}

并在运行时:

List<MyClass> list = // some MyClass objects as List ...

以及包含三个以上新属性的包装列表

var wrapperlist = list.Select(m=>
new
{
  P1 = m.P1  // I don't want to do this
  P2 = m.P2  // I don't want to do this
  NewP1 = someNewVal1
  NewP2 = someNewVal2
  NewP3 = someNewVal3
});

注意我不喜欢为MyClass的子类的新属性使用新的Wrapper类,它将MyClass对象作为构造函数参数或类似的东西这个,因为包装类是一个通用类,它有固定的属性(NewP1NewP2NewP3),它被设计为包装任何类型对象(例如MyClass)。所以导致我们在MyClass定义中进行修改的任何解决方案都是不可接受的。

更新 Wrapper类是一个匿名对象,它是在运行时在Select扩展方法中创建的。

1 个答案:

答案 0 :(得分:2)

这样的事情对你有用吗?

var wrapperlist = list.Select(m =>
new
{
    WrappedObject = m,
    NewP1 = someNewVal1,
    NewP2 = someNewVal2,
    NewP3 = someNewVal3
});