我无法通过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;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Mongodb 3.0,c#驱动程序2.1,wird tiger存储引擎.请原谅我使用许多'Task.Run()',因为出于某种原因我需要同步调用异步mongo方法.任何建议将不胜感激...... thx
Pau*_*aul 10
无法确定x => x.Id的序列化信息
如错误所示,您不能以这种方式在查询中使用x.Id.提供的lambda表达式用于检索属性的名称,但它不了解x.Id是什么.
你可以试试这个:
var filter = Builders<GridFSFileInfo>.Filter.Eq("_id", gridfsObjectID);
Run Code Online (Sandbox Code Playgroud)
它使用这个过载的的等式方法,并执行所述隐式转换从字符串到FieldDefinition.
表达式对我来说似乎有点令人费解,但是你可以在这个问题的答案中找到更多与Expression有关的信息:为什么你会使用Expression>而不是Func?
| 归档时间: |
|
| 查看次数: |
1815 次 |
| 最近记录: |