MongoDb 对 byte[] 进行查询,C# 驱动程序抛出 ExpressionNotSupportedException

问题描述 投票:0回答:1

我是 MongoDB 新手,我有以下查询

var personList = collection.Find
  (p => p.EmailAddressSha512 == PiSha512.CreateSha512(emailAddress.ToLower())).ToList();

执行查询抛出异常

MongoDB.Driver.Linq.ExpressionNotSupportedException:
'Expression not supported: (p.EmailAddressSha512 == value(System.Byte[])).

EmailAddressSha512
byte[]
并且
PiSha512.CreateSha512(emailAddress.ToLower())
返回
byte[]

虽然驱动程序(最新版本,2.21.0)引发异常并在调试模式下显示,但它似乎已得到处理,并且查询正确执行并返回预期的人员列表。我想知道一些事情。

  1. 为什么会抛出异常异常?
  2. 为什么尽管抛出了异常,它仍然可以正常工作?
  3. 我该怎么做才能阻止抛出异常?
c# mongodb mongodb-query
1个回答
0
投票

您调用的

Find
方法采用表达式,而不是委托。作为参数传递的表达式通常用于解释而不是执行。

  1. 在您的情况下,在解释表达式时,mongodb 驱动程序检测到不受支持的构造 -
    PiSha512.CreateSha512(emailAddress.ToLower())
    并在异常中通知您这一点
  2. 它无法正常工作,因为驱动程序没有使用您的表达式构建对 mongodb 的查询。
  3. 要避免此错误,请在表达式外部执行代码
    PiSha512.CreateSha512(emailAddress.ToLower())
    ,并将带有结果的变量传递到表达式中。
© www.soinside.com 2019 - 2024. All rights reserved.