.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
相关产品推荐
相关产品推荐

