0

这是场景 -

我们有一个支持发布到多个社交网站(Facebook、Twitter、G+ 等)的应用程序。

我们使用 TPH 将其构建在一个Posts表中,并带有一个鉴别器列。这些“社交”帖子中的每一个都派生自一个公共基类,适当地称为SocialPost.

我们只是说它会用,和context.SocialPosts的鉴别器抓取所有内容。FacebookPostTwitterPostGooglePost

现在我们需要能够获取类型的混合搭配。基于一个设置,我们希望撤回所有,例如 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然后在应用程序端过滤掉我不想要的那些。

4

0 回答 0