以下是情景 -
我们有一个应用程序支持发布到多个社交网站(Facebook,Twitter,G +等)。
我们使用TPH在一个Posts
表中构造了这个,并带有一个鉴别器列。这些"社交" posts来自一个公共基类,恰当地称为SocialPost
。
我们只会说context.SocialPosts
,它会使用FacebookPost
,TwitterPost
和GooglePost
的鉴别器来抓取所有内容。
现在我们需要能够抓住这些类型的混合搭配。根据设置,我们希望撤回所有内容,例如Facebook和Google Posts进行处理,同时保持Twitter不受影响。
在一个查询中有没有明智的方法呢?
以下代码
context.SocialPosts.Where(x=>x is FacebookPost || x is GooglePost)
将生成类似以下的SQL
SELECT * FROM Posts WHERE Discriminator IN ('FacebookPost', 'TwitterPost', 'GooglePost') AND Discriminator IN ('FacebookPost','GooglePost')
这显然不是我想要的。我不确定Discriminator 上的双重过滤器本身是否重要,但它肯定是奇怪的SQL使用。
那么,有没有一种理智的方法可以通过一个查询获取多个鉴别器类型,或者最好是抓住所有SocialPosts
然后过滤掉我不想要的应用程序端。