我设计了一个EF 6 TPT数据库。我创建了一个类型A和B,后者继承自前者。我还没有完全理解的是,你如何查询只有A型或B型的对象?例如:
//When I need List<A>; works fine so far
return _db.ASet.Where(m => !(m is B)).ToList();
//When I need List<B>
_db.ASet.Where(m => !(m is A)).ToList();
第二个代码行是我的问题所在。我得到List<A>
作为返回类型,但我需要List<B>
。我尝试使用Cast<B>()
,但后来我收到A无法转换为B的错误。
LINQ to Entities only supports casting EDM primitive or enumeration types.
另一方面,这甚至是我正在做的事情吗?我在这里看到了几个答案的解决方案,但我在MSDN上找不到任何东西,所以我不确定这是否是推荐的方法。
编辑:根据我的理解,我需要有一个我不会实例化的基类,并且A
和B
派生自该基类。这是对的吗?
答案 0 :(得分:1)
您正在寻找“ OfType ”方法。
// When I need List<A>; works fine so far
return _db.ASet.OfType<A>().ToList();
// When I need List<B>
_db.ASet.OfType<B>().ToList();
修改强>
如果B:A且需要来自A的所有实体,但不包括B中的实体,那么您可以使用 方法除外
_db.ASet.Except(_db.ASet.OfType<B>()).ToList();