c# - Mongodb:无法通过ObjectID获取GridFSFileInfo,但通过文件名成功

标签 c# mongodb gridfs

我无法通过 ObjectID 获取 GridFSFileInfo,但通过文件名成功, 错误信息是: 无法确定 x=>x.Id

的序列化信息
string objectID = ObjectIDTxt.Text.Trim();
GridFSBucketOptions bucketOptions = new GridFSBucketOptions();
bucketOptions.BucketName = "myBucket";

ObjectId gridfsObjectID = new ObjectId(objectID);

//by filename will succeed
//var filter = Builders<GridFSFileInfo>.Filter.Eq(x => x.Filename, "myfilename.pdf");
//by ObjectID will fail
var filter = Builders<GridFSFileInfo>.Filter.Eq(x=>x.Id,gridfsObjectID);

var findOptions = new GridFSFindOptions();
findOptions.Limit = 1;

var myBucket = new GridFSBucket(_database, bucketOptions);

using (var taskOfCursor = Task.Run(() => myBucket.FindAsync(filter, findOptions)))
{   
    var taskOfList = Task.Run(() => taskOfCursor.Result.ToListAsync());
    GridFSFileInfo fileInfo = taskOfList.Result.FirstOrDefault();
    if (fileInfo != null)
    {
        FileNameLbl.Text = fileInfo.Filename;
    }
}

我使用的是 Mongodb 3.0,c# driver 2.1,wird Tiger 存储引擎。 请原谅我使用了许多“Task.Run()”,因为出于某种原因我需要同步调用异步 mongo 方法。 任何建议将不胜感激... 谢谢

最佳答案

Unable to determine the serialization information for x=>x.Id

正如错误提示的那样,您不能以这种方式在查询中使用 x.Id。提供的 lambda 表达式用于检索属性的名称,它不理解 x.Id 是什么。

你可以试试这个:

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

使用 this overloadEq方法并执行the implicit conversion从 String 到 FieldDefinition。

表达式对我来说似乎也有点令人费解,但您可能会在以下问题的答案中找到与表达式相关的更多信息:Why would you use Expression> rather than Func?

关于c# - Mongodb:无法通过ObjectID获取GridFSFileInfo,但通过文件名成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33495208/

相关文章:

java - 嵌入 Mongodb 到 Spring Boot 总是重新创建数据库

c# - 如何将 MediatR PublishStrategy 添加到现有项目

c# - 为复选框使用 "if"语句的替代方案

javascript - 如何防止 MongoDB 锁定

mongodb - Grails MongoDB查找

mongodb - GridFS 和标准集合、内存使用

javascript - mongoose 和 nodejs 的 mongodb 连接超时错误

mongodb - 每个 Mongoldb GridFS block 是否代表磁盘中的每个物理文件

c# - Web 服务与 Java 的集成,它们的类型有问题吗?

c# - Microsoft Bot Framework - Teams 和 Skype for Business 不支持自适应卡版本