Linq与MongDB错误与Where子句

时间:2016-01-12 11:29:11

标签: c# .net vb.net mongodb linq

我有这段代码:

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)。

¿任何想法?

4 个答案:

答案 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