带有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)。
知道吗?
在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