LINQ – 向结果添加属性

有没有办法将属性添加到除以下内容之外的Linq查询结果的对象?

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

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

我还在学习LINQ,感谢您的建议。

添加部分类:

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

然后,您可以在创建对象后进行分配。

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

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

eking的回答将是最简单的方法。

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

 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有一种内置的方法可以使用PopulateWith方法处理它。

    • 这是一个代码示例 。

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

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