LINQ - 将属性添加到结果
是否有一种方法可以将属性添加到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; }
}
然后你就可以将其指定你所创建的对象之后。
这是编译时间。这不是要求运行时间的问题,因此这不是问题的有效答案吗? – peSHIr 2009-02-26 11:11:17
我想你可以返回新的属性组成和所选对象的新对象,如:
var query = from x in db.Courses
select new
{
Course x,
NewProperty = true
};
我真的很想找一种方法将属性“注入”到当前对象中。但是,谢谢! – 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 way与
PopulateWith
方法来处理这种情况。-
这是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());
这是一个愚蠢的问题。我现在更清楚了。自动映射库只是等待发生的错误。不要懒惰。编写映射代码。 – 2015-10-07 00:25:33