作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下两个类:
public class Base
{
public int Id { get; set; }
public string PropertyA { get; set; }
}
[NotMapped]
public class Derived : Base
{
public string PropertyB { get; set; }
}
我有以下查询:
var baseQ = from b in db.Bases
let propertyB = SomeCalculation()
select new { Base = b, PropertyB = propertyB };
这按原样工作。我想要的是这样的东西(伪代码):
List<Derived> list = (from b in db.Bases
let propertyB = SomeCalculation()
select new { Base = b, PropertyB = propertyB }).ToList();
是否可以将选择“向下转换”到派生类,或者我是否必须为派生类编写一个构造函数,看起来像这样:
public Derived(Base b, string b) { ... }
我的最终解决方案:我将派生类更改为以下内容(因为您甚至不能在对象初始值设定项中使用 string.Format):
public class Derived
{
public Base Base { get; set; }
public string PropertyB { get; set; }
public string CalculatedProperty { get { ... } }//For string.Format and other stuff
}
我正在按如下方式进行分配:
List<Derived> list = (from b in db.Bases
let propertyB = SomeCalculation()
select new Derived { Base = b, PropertyB = propertyB }).ToList();
最佳答案
在这种情况下您不能转换,因为您的查询返回的是匿名类型。相反,您可以使用对象初始值设定项将属性设置为 Derived
类:
List<Derived> list = (from b in db.Bases
let propertyB = SomeCalculation()
select new Derived
{
Id = b.Id,
PropertyA = b.PropertyA,
PropertyB = propertyB
}).ToList();
如果您有大量属性,您可以采用您建议的方法,或添加包含您的属性的数据传输对象 (DTO),然后使用 AutoMapper 等库为您执行映射。
关于c# - LINQ 继承 "Down-Cast"新属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8228942/
我是一名优秀的程序员,十分优秀!