0

リクエスト: /api/person?$filter Name eq 'John' with server backed up method that return repo.GetAll().Select(o => Mapper.Map<>PersonDTO>(o));

$filter リクエストのみが「Where with predicate after a project is not supported」でエラーになりますが、$top / $skip / $orderby は正常に動作します。私の推測では、フィルターを適用する前にクエリとプロジェクトを生成する際に、Mongo C# にバグがあります。代わりに、最初にフィルターを適用してから投影する必要があります。私は OData 5.2.0-rc1 を使用しており、Mongo C# ドライバーは 1.7 です。

どんな入力でも大歓迎です。ありがとう...

4

1 に答える 1

0

これは、Linq の現在の実装における制限です。私たちは、このチケットhttps://jira.mongodb.org/browse/CSHARP-601でこれを修正するよう取り組んでいます。

ただし、実際に何をしようとしているのかを理解することをお勧めします。フィルターの前に射影するということは、2 つの列を一緒に追加するなど、計算式でフィルター処理していることを意味する可能性があります。MongoDB クエリはこのタイプの動作をサポートしていません。そのため、これは現在 linq プロバイダーによって許可されていません。集約フレームワークはこれをある程度まで許可しますが、集約フレームワークによって課される別の制限があります。

あなたの特定のケースでは、あなたが私たちに望んでいることは不可能です。AutoMapper で生成されたオブジェクトに基づいて MongoDB クエリを作成する方法を教えてください。これは、(実行時に) AutoMapper マッピングを読み取って内部クラス モデルに適用しない限り、まったく不可能です。

于 2013-01-10T14:36:41.210 に答える