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

