带有MongDB的Linq带有Where子句的错误

本文关键字:带有 错误 子句 Linq MongDB Where | 更新日期: 2023-09-27 18:29:54

我有这个代码:

Imports MongoDB.Bson
Imports MongoDB.Driver
Imports MongoDB.Driver.Linq
Public Class Principal
Private Sub Find
    Dim mongo As New MongoClient("mongodb://localhost")
    Dim db = mongo.GetDatabase("test")
    Dim Tipos = db.GetCollection(Of TipoDeIdentificacion).("TiposDeIdentificacion")

这些工作良好:

Dim query = Tipos.AsQueryable.OrderByDescending(Function(X) X.id).ToList
Dim query1 = Tipos.AsQueryable.Where(Function(X)  x.Nombre.Contains("DNI")).ToList

这些不起作用:

Dim query2 = Tipos.AsQueryable.Where(Function(X) X.Nombre = "DNI").ToList

引发异常:

不支持CompareString({document}{Nombre},"DNI",False)。

知道吗?

带有MongDB的Linq带有Where子句的错误

在Mongo-Linq驱动程序中,Equality运算符不适用于字符串。。。这毫无意义。我用"是"代替,它工作得很好

Function(X) X.Nombre Is "DNI"

MongoDB C#驱动程序似乎并不真正支持VB.NET。这就是为什么名称是C#驱动程序(而不是.NET驱动程序)。

顺便说一句:Is(而不是=)和IsNot(而不是<>)只适用于find。

问题是>或<没有等价项(截至VB中具有-1、0或1的CompareString)。

因此,目前MongoDB C#Linq还不能完全与VB.NET配合使用。

找到了解决方案!

在类TipoDeIdentificacion中,id被声明为Nullable(属于Long)。

应该在C#驱动程序内部集成某种进程,以管理具有可为null字段的相等性。

知道吗?

我也有同样的问题。对我来说,这个代码工作

Dim query2 = Tipos.AsQueryable.Where(Function(X) X.Nombre.Equals("DNI")).ToList