ここにシナリオがあります -
複数のソーシャル サイト (Facebook、Twitter、G+ など) への投稿をサポートするアプリケーションがあります。
TPH を使用して、これをすべて 1 つのPosts
テーブルにまとめ、識別子の列を付けました。これらの「ソーシャル」投稿のそれぞれは、適切に呼ばれる共通の基本クラスから派生しますSocialPost
。
と言うだけで、 、、およびcontext.SocialPosts
の弁別子ですべてを取得するということでした。FacebookPost
TwitterPost
GooglePost
ここで、型の組み合わせを取得できるようにする必要があります。設定に基づいて、Facebook や Google の投稿などを処理するためにすべて引き戻し、Twitter はそのままにしておく必要があります。
1 つのクエリでそれを行う適切な方法はありますか?
次のコード
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を使用しているのは間違いありません。
それで、1回のクエリで複数の識別子タイプを取得する適切な方法はありますか、それともすべてを取得してSocialPosts
から、アプリケーション側で不要なものを除外する方がよいでしょうか。