【发布时间】:2016-10-03 22:07:52
【问题描述】:
我有一个由两个类继承的抽象类。这两个类都代表数据库中的表。我在抽象类中映射表达式时遇到了麻烦,因此我不断收到无法转换为 SQL 的异常。我在 Stackoverflow 中发现的所有问题都是关于已经对我有用的列。
下面是一个非常简单的代码,说明了我的意思。 Car 和 Motorcycle 对 _isNew Expression 有完全独立的实现。
public abstract class Vehicle {
public abstract boolean IsNew;
}
public partial class Car: Vehicle {
public override boolean IsNew {
get { _isNew.Invoke(this); }
}
}
public partial class Motorcycle: Vehicle {
public override boolean IsNew {
get { _isNew.Invoke(this); }
}
}
我希望能够在 IQueryable 上调用 _isNew 表达式或 IsNew 属性,但如果 Vehicle 是 Car 类型,它会运行 Car 类的 _isNew。无论如何我可以做到这一点吗?我尝试的所有解决方案都导致无法转换为 SQL 的异常。
【问题讨论】:
-
什么是
_isNew? Can't 是 可以 被翻译的表达式吗? -
_isNew 是一个可以翻译成 SQL 的表达式(例如对于汽车 Expression
> _isNew = (v) => v.Age > _isNew = (v) => v.Age -
我想这根本行不通,因为要调用您对 IsNew 的覆盖,将需要 Car 或 Motorcycle 的具体实例。因此,EF 必须先查询项目才能创建这些实例。
-
什么是确切的错误信息?
-
@Sami 如果您的问题包含导致错误的语句,那就太好了。
标签: c# .net linq inheritance .net-3.5