实体框架:如何从L2E返回基本类型

时间:2020-03-06 14:29:16  来源:igfitidea点击:

考虑以下架构:

  • 基础对象"实体"
  • 派生对象" Entry:Base"
  • 以及另一个派生对象'CancelledEntry:Entry'

在EntitySQL中,我可以编写以下内容:

[...] where it is of (only MyEntities.Entry) [...]

只返回Entry类型的对象,不返回Entity或者CancelledEntry的对象。

在linq to sql中,以下命令将返回Entry和CancelledEntry类型的对象。

EntityContext.EntitySet.OfType<Entry>()

仅返回Entry类型的对象使用的语法/函数是什么?

解决方案

好的,我找到了部分解决方案:

EntityContext.EntitySet.OfType<Entry>().Where( obj => !(obj is CancelledEntry) )

但是,这非常糟糕,因为如果我创建一个新的派生对象,则必须进入所有查询并特别添加一个条件以将其删除。

必须有更好的解决方案

为什么不对IQueryable <Entry>应用扩展方法,称为ApplyBaseEntryFilter(),它将应用此过滤器并返回IQueryable <Entry>。

这是如何重用linq查询片段的示例。在IQueryable <Entity>上使用扩展方法是重用查询的好方法,因为我们需要在应用程序周围复制和粘贴查询片段,希望对我们有所帮助。