实体框架继承-仅检索父类型

Nao*_*aor 4 .net c# entity-framework

I供应商类别:

public class Supplier {
    ....
    ....
    ....
}
Run Code Online (Sandbox Code Playgroud)

我也有分包商类,并且分包商是供应商:

public class Subcontractor:Supplier {
    ....
    ....
    ....
}
Run Code Online (Sandbox Code Playgroud)

在我的数据库中,我有带有数据的Suppliers表和另一个具有id字段的表,该表充当供应商表的外键,并且那里也有分包商数据。

在实体框架edmx文件中,我声明了继承关系: 遗产

现在我想让所有不是分包商的供应商都在做,所以我在做:

context.Suppliers.OfType<Supplier>();
Run Code Online (Sandbox Code Playgroud)

但这也返回了分包商。

我如何才能只获得不是分包商的供应商?

Sla*_*uma 6

试试看:

context.Suppliers.Where(s => !(s is Subcontractor));
Run Code Online (Sandbox Code Playgroud)

编辑

如果您有多个类是从SupplierLINQ to Entities的唯一选项派生而来的,则好像是这样的:

context.Suppliers.Where(s => !(s is Subcontractor) 
                          && !(s is DerivedClass2)
                          && !(s is DerivedClass3)); // etc.
Run Code Online (Sandbox Code Playgroud)

实体SQL支持ONLY关键字,该关键字允许查询特定类型。但是没有相应的副本作为LINQ运算符。

是一个OfTypeOnly<TEntity>运算符的实现,但是它大量使用元数据信息和手动表达式构建,并且在简单的场景中可能会显得过大。