LINQ - 将属性添加到结果

问题描述:

是否有一种方法可以将属性添加到Linq查询结果而非以下对象中?LINQ - 将属性添加到结果

var query = from x in db.Courses 
       select new 
       { 
        x.OldProperty1, 
        x.OldProperty2, 
        x.OldProperty3, 
        NewProperty = true 
       }; 

我想这样做,而不列出我的对象的所有当前属性。有很多属性,我不想在更改我的类时更新此代码。

我仍然在学习LINQ,我很欣赏你的建议。

+0

这是一个愚蠢的问题。我现在更清楚了。自动映射库只是等待发生的错误。不要懒惰。编写映射代码。 – 2015-10-07 00:25:33

与部分类添加:

public partial class Courses 
{ 
    public String NewProperty { get; set; } 
} 

然后你就可以将其指定你所创建的对象之后。

+0

这是编译时间。这不是要求运行时间的问题,因此这不是问题的有效答案吗? – peSHIr 2009-02-26 11:11:17

我想你可以返回新的属性组成和所选对象的新对象,如:

var query = from x in db.Courses 
       select new 
       { 
        Course x, 
        NewProperty = true 
       }; 
+2

我真的很想找一种方法将属性“注入”到当前对象中。但是,谢谢! – 2009-02-25 21:10:56

芯吸的回答将是最直接的方法。

如果这对你不起作用(因为你需要传递结果或其他),并假设你正在处理的类已经定义了你想要设置的属性,你可以创建一个拷贝构造函数或者工厂方法,把你想要设置的现有实例加属性的值:

var query = from x in db.Courses 
      select new Course(x, valueOfNewProperty); 

另外,如果Course定义属性,你可以继承它,并使用相同的方法:

var query = from x in db.Courses 
      select new CourseWithExtraProperty(x, valueOfNewProperty); 

(显然,为你的子类选择一个更好的名字)

虽然,除非你真的需要这样做,否则坚持eking的解决方案。

  • ServiceStack具有built-in wayPopulateWith方法来处理这种情况。

    • 这是code example

      foreach (var item in results) 
      { 
          var test1 = new ItemDto().PopulateWith(item); 
          test1.extraField1 = "extra"; 
          response.Add(test1); 
      }` 
      
  • 如果你不使用ServiceStack,你可以随时使用AutoMapper

    CreateMap<Foo, Bar>().ForMember(x => x.ExtraBarProperty, opt => opt.Ignore());