2013-01-10 3 views
0

Demande:/api/personne? $ Filter Nom eq 'John' avec la méthode sauvegardée par le serveur que retourner repo.GetAll(). => Mapper.Map <> PersonDTO> (o));Mongo C# Driver OData problème "Où avec le prédicat après un projet n'est pas pris en charge"

Seul le filtre $ demande une erreur avec "Où avec un prédicat après qu'un projet n'est pas supporté" mais $ top/$ skip/$ orderby fonctionnent correctement. Ma conjecture est, Mongo C# a un bug lors de la génération de la requête & projets avant d'appliquer le filtre. Au lieu de cela, il devrait appliquer le filtre d'abord, puis le projet. J'utilise OData 5.2.0-rc1 et le pilote Mongo C# est 1.7.

Toutes les entrées sont très appréciées. Merci ...

+0

Avez-vous vérifié la [source] (https://github.com/mongodb/mongo-csharp-driver)? Les docs officiels ne mentionnent pas de soutien pour cela. Il y a quelques implémentations d'odata open source que vous pouvez regarder. – WiredPrairie

Répondre

0

Ceci est une limitation dans l'implémentation actuelle de Linq. Nous travaillons pour corriger cela avec ce billet: https://jira.mongodb.org/browse/CSHARP-601. Cependant, je vous encourage à comprendre ce que vous essayez réellement de faire. La projection avant un filtre peut signifier que vous filtrez des expressions calculées, par exemple en ajoutant 2 colonnes ensemble. Les requêtes MongoDB ne supportent pas ce type de comportement, ce qui est actuellement interdit par notre fournisseur linq. Le cadre d'agrégation permet cela jusqu'à un certain point, mais il existe un ensemble différent de limitations imposées par le cadre Agrégation.

Dans votre cas particulier, ce que vous nous demandez de faire est impossible. Vous nous demandez de savoir comment créer une requête MongoDB basée sur un objet généré par AutoMapper. Ceci est tout simplement impossible à moins que nous (à l'exécution) ne lisions le mappage AutoMapper et l'appliquions à nos modèles internes de classe.

Questions connexes