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

MongoDB驱动升级至2.19.1后ExpressionNotSupportedException问题求助

解决MongoDB驱动2.19.1版本的类型转换查询错误

问题原因

MongoDB驱动2.19.1版本收紧了查询表达式的类型校验规则。你的代码中DataStatusID是byte?类型,而查询条件里的1是int类型,驱动现在无法自动处理这种跨数值类型的可空转换,因此抛出不支持转换的错误。

解决方案

以下几种方法均可解决该问题:

  • 直接使用同类型常量对比
    将查询条件中的1显式转换为byte类型,让两边类型完全匹配,避免驱动执行自动转换:

    Collection.FindSync<Data>(o => o.DataStatusID == (byte)1);
    
  • 动态值先转类型再查询
    如果查询值是动态的int变量,先将其转换为byte后再用于查询:

    int targetStatus = 1;
    byte byteStatus = (byte)targetStatus;
    Collection.FindSync<Data>(o => o.DataStatusID == byteStatus);
    
  • 使用FilterDefinitionBuilder构建查询
    借助MongoDB的FilterDefinitionBuilder构建查询,绕过表达式树的转换问题:

    var filter = Builders<Data>.Filter.Eq(d => d.DataStatusID, (byte)1);
    Collection.FindSync<Data>(filter);
    

补充说明

在2.17.1版本中,驱动对这种隐式类型转换的表达式兼容性更强,允许跨数值类型的可空值对比。升级到2.19.1后,驱动的表达式解析逻辑更严格,要求查询条件两边的类型必须一致,因此触发了该错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:22:06