目前正在努力过滤这些对象具有继承属性的对象列表(称为Field),此属性称为 FieldReference 。这是一个抽象类,所有Field对象都具有此属性,但它可以是不同的类型,例如;
DebtorFieldReference
我们要做的是查询属性为DebtorFieldReference类型的所有字段,并且我们还希望过滤此DebtorFieldReference对象中名为DebtorId的值。
我们尝试了以下代码段,但EF不允许我们进行投射,我们也尝试在GetType上查询但没有成功。
var results = FieldProvider.Get(f => f.FieldOwnerTypeId == (byte)Enum.FieldReferenceType.Debtor && ((DebtorFieldReference)f.FieldReference).DebtorId == message.Reference);
我过去用NHibernate完成了这个,没有任何问题,请告诉我,我只是做错了,EF并没有受到这么大的限制: - (
感谢您的帮助。
答案 0 :(得分:1)
经过一些试验和错误之后,我实际上已经开始工作了,并不完全确定为什么这会起作用但是Cast不会,但是这里就是行了它;
var results = FieldProvider.Get(f => (f.FieldReference as DebtorFieldReference).DebtorId == message.Reference);
换句话说,使用'作为'而不是强制转换,可能是强制转换,当它涉及空值时表现不同。