我有这段代码:
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)。
¿任何想法?
答案 0 :(得分:2)
在Mongo Linq驱动程序中,Equality Operator不能使用字符串......这没有任何意义。 我用" Is"相反,它工作正常
Function(X) X.Nombre Is "DNI"
答案 1 :(得分:1)
似乎MongoDB C#驱动程序并不真正支持VB.NET。这就是为什么这个名字是C#驱动程序(而不是.Net Driver)。
顺便说一句: 是(而不是=)和IsNot(而不是<>)只能找到。
问题是>或者<没有等价(在VB中具有-1,0或1的CompareString)。
所以,在这一刻,MongoDB C#Linq并不完全适用于VB.NET。
答案 2 :(得分:0)
找到解决方案!
在类TipoDeIdentificacion中,id被声明为Nullable(Long)。
在C#驱动程序中应该集成一些类型的进程来管理与可空字段的相等性。
有什么想法吗?
答案 3 :(得分:0)
Dim query2 = Tipos.AsQueryable.Where(Function(X) X.Nombre.Equals("DNI")).ToList