IQueryableのIQueryable <基本>に<派生>を変換することは可能?
-
16-09-2019 - |
質問
私は、共分散について知っている、と私は一般的に、それはC#でV4.0までは可能ではないだろうことを知っています。
しかし、私は、特定の場合について疑問に思って。何とか実際にクエリを実行しませんが、実際にIQueryable<Derived>
コール「を通過する」ことができますラッパークラスを作成することにより、IQueryable<Base>
する.Where<>()
を変換取得するいくつかの方法がありますか?
私のユースケースは、私は多くの類似のテーブルを持つデータベーススキーマに対処しようとしていますということです。フィールドのほとんどは共通であり、共通のフィールドの多くは、各テーブルに照会する必要があります。私はLinqToSqlを使用しています。私は、各テーブルのすべてのクエリの重複を避けるために期待していた。
解決
あなたが探しているものを、次のされていますか。
var results = queryable.OfType<Base>.Where(...);
OfTypeメソッドは、指定された型であるものを集めるだろう、と、コレクション内のすべての項目は、型ベースのいずれかである、またはタイプのベースから派生した場合、彼らは資格をすべきです。以降ここでは、すべての項目は、型ベースであろう。
他のヒント
それはあまりきれいではあるが、
次のようにも、動作します。
var results = queryable.Select(derived => (Base)derived).Where(...);
所属していません StackOverflow