这是场景 -
我们有一个支持发布到多个社交网站(Facebook、Twitter、G+ 等)的应用程序。
我们使用 TPH 将其构建在一个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')
这显然不是我想要的。我不确定在鉴别器上使用双重过滤器本身是否重要,但使用它绝对是奇怪的 SQL。
那么,有没有一种理智的方法可以通过一个查询来获取多个鉴别器类型,或者最好是全部获取SocialPosts
然后在应用程序端过滤掉我不想要的那些。