在TPT数据库中只获取Base类或Child类对象

时间:2016-03-02 12:56:47

标签: inheritance entity-framework-6 table-per-type

我设计了一个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上找不到任何东西,所以我不确定这是否是推荐的方法。

编辑:根据我的理解,我需要有一个我不会实例化的基类,并且AB派生自该基类。这是对的吗?

1 个答案:

答案 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();