2

私は共分散について知っており、一般的に、v4.0 までは C# では不可能であることを知っています。

しかし、私は特定のケースについて疑問に思っています。実際にはクエリを実行しないが、実際には呼び出しを「パススルー」できるラッパークラスを何らかの方法で作成することで、に変換する方法はありIQueryable<Derived>ますか?IQueryable<Base>.Where<>()

私の使用例は、多くの同様のテーブルを持つデータベース スキーマを処理しようとしているということです。ほとんどのフィールドは共通しており、共通フィールドの多くは各テーブルでクエリを実行する必要があります。私はLinqToSqlを使用しています。各テーブルのすべてのクエリが重複しないようにしたいと考えていました。

4

2 に答える 2

6

お探しのものは次のとおりですか?

var results = queryable.OfType<Base>.Where(...);

OfType メソッドは、指定された型のものをすべて収集します。コレクション内のすべての項目が Base 型であるか、または Base 型から派生したものである場合、それらは資格を得る必要があります。後続の where では、すべての項目が Base 型になります。

于 2009-09-24T23:06:23.480 に答える
0

あまりきれいではありませんが、以下も機能します。

var results = queryable.Select(derived => (Base)derived).Where(...);
于 2009-09-25T08:09:08.687 に答える