2017-01-10 8 views
1

私たちのAPIを21世紀に持ち込み、すべてのクエリを新しい(2.4)Mongo C#ドライバを使用するように更新しています。派生型のフィールドを使用したフィルタ

Query.Or(
    Query<UserPermission>.EQ(p => p.UserId, userId), 
    Query<GroupPermission>.In(p => p.GroupId, groupIds) 
) 

UserPermissionGroupPermission両方がPermission継承:私たちのクエリの一つは、このフィルタを持っています。古いドライバでは、基本的なコードがフィルタドキュメントを作成したばかりで、Mongoはデータを取得するうねりがあったので、これはうまくいきました。新しいドライバで

私はこのような何かを見てきました、残念ながら

permissionsQueryBuilder.Or(
    userPermissionsQueryBuilder.Eq(p => p.UserId, userId), 
    groupPermissionsQueryBuilder.In(p => p.GroupId, groupIds) 
) 

またはFilterDefinition<Permission>[]を期待し、2つのクエリ要素は、それぞれFilterDefinition<UserPermission>FilterDefinition<GroupPermission>を返すので、それは動作しません。

新しいMongoドライバを使用してこれに近づく正しい方法は何ですか?私はGoogleを検索しましたが、検索結果はおおよそ_tに関連しているように見えます。

ありがとうございます。古いドライバを使用して

+1

用語「nit-pick」:「多形型」ではなく「ジェネリック型」を意味すると思います。 – Blorgbeard

+1

@Blorgbeard注目型に修正されました。 – john

答えて

0

は、これは不可能でしたが、それは私が単に新しいドライバでこれを行うことができ判明:

permissionsQueryBuilder.Or(
    permissionsQueryBuilder.Eq(p => (p as UserPermission).UserId, userId), 
    permissionsQueryBuilder.In(p => (p as GroupPermission).GroupId, groupIds) 
) 

モンゴは、私は演算子として使用するときに正しくクエリを構成するようで、おそらく標準的なキャストも同様にうまくいくでしょう。

関連する問題