2015-11-03 1 views
3

Je ne parviens pas à obtenir GridFSFileInfo par ObjectID, mais à réussir par nom de fichier, et le message d'erreur est: Impossible de déterminer les informations de sérialisation pour x => x.Id J'utilise Mongodb 3.0, C# driver 2.1, le moteur de stockage wird tiger. Pardonnez-moi à propos de l'utilisation de nombreux 'Task.Run()', parce que pour une raison quelconque, j'ai besoin de synchroniser les méthodes d'appel async mongo. Toutes les suggestions seront appréciées ... thxMongodb: Echec de l'obtention de GridFSFileInfo par ObjectID, mais réussite par nom de fichier

Répondre

5

Impossible de déterminer les informations de sérialisation pour x => x.Id

Comme l'erreur l'indique, vous ne pouvez pas utiliser l'intérieur x.Id votre requête de cette manière. L'expression lambda fournie est utilisée pour récupérer le nom de la propriété et ne comprend pas ce qu'est x.Id.

Vous pouvez essayer ceci:

var filter = Builders<GridFSFileInfo>.Filter.Eq("_id", gridfsObjectID); 

qui utilise this overload de la méthode Eq et exécute the implicit conversion de chaîne à FieldDefinition.

expressions semblent un peu déroutante pour moi aussi, mais vous pouvez trouver plus d'informations liées à l'expression dans les réponses à cette question: Why would you use Expression> rather than Func?

+0

Cela fonctionne! Merci pour la réponse et autres informations ci-dessus. Bien qu'ils semblent être un peu difficile pour moi (surtout le lien de l'Eq et la conversion implicite). Je vais passer du temps sur eux. Encore une fois. – ChiaChi

0

Vous pouvez ajouter la syntaxe lambda directement dans le champ Rechercher méthode:

myBucket.FindAsync(x => x.Id == new MongoDB.Bson.ObjectId(objectID), findOptions) 
+0

J'ai essayé ceci et ai eu l'erreur de compilation. Message d'erreur: n'a pas pu convertir l'expression de lambda en MongoDB.Driver.FilterDefinition , parce qu'il n'est pas délégué. Et voici l'API de FindAsync: [link] (http://api.mongodb.org/csharp/2.1/html/M_MongoDB_Driver_GridFS_GridFSBucket_FindAsync.htm). FindAsync ne semble pas accepter le paramètre d'expression lambda. – ChiaChi