You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8升级后MongoDB查询报Expression not supported错误求助

问题原因及解决方案

核心问题

你的DTO中Id属性是ObjectId类型,但查询时传入了BsonObjectId类型的值,.NET 8搭配新版MongoDB驱动时,表达式解析器不再支持这种跨类型的隐式转换表达式,因此抛出Expression not supported: Convert(x.Id, BsonObjectId)错误。

解决方法

  • 统一查询值类型
    直接使用ObjectId类型创建查询参数,和DTO的属性类型保持一致,驱动就能正确解析表达式:

    ObjectId id = ObjectId.Create(commitId);
    var query = Filters.Eq(x => x.Id, id);
    var result = await Collection.Find(query).FirstAsync();
    
  • 提取BsonObjectId的实际ObjectId值
    如果必须保留BsonObjectId的创建逻辑,需要手动取出其内部的ObjectId值传入查询:

    BsonObjectId id = BsonObjectId.Create(commitId);
    var query = Filters.Eq(x => x.Id, id.Value); // 提取Value属性
    var result = await Collection.Find(query).FirstAsync();
    
  • 确认MongoDB驱动版本
    确保使用适配.NET 8的最新MongoDB驱动(推荐2.20.0及以上版本),旧版本驱动在.NET 8环境下可能存在表达式解析的兼容性问题。

内容的提问来源于stack exchange,提问作者Boas Enkler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:42:35