Linq Where子句中的MongoDB和Guid

时间:2014-01-10 17:52:35

标签: linq mongodb

我在mongodb中存储了一个包含Guid的对象。 Mongodb将Guid转换为二进制值

{
  "_id" : ObjectId("52cf4a467b302a4797db23e8"),
  "name" : "test",
  "guid" : new BinData(3, "qZ8PQdmDv0+K500wnj6skA=="),
}

当我在Linq表达式中使用Guid并且计数始终为0时,我得到一个空结果集。

var queryable = _database.GetCollection<MyObject>("myname").AsQueryable();
var guid = new Guid("410f9fa9-83d9-4fbf-8ae7-4d309e3eac90");
var count = queryable.Where(x => x.Guid == guid).Count();

原因是Linq生成以下请求

count: "member_variables", query: { panelid: "410f9fa9-83d9-4fbf-8ae7-4d309e3eac90" }

但请求应为

count: "member_variables", query: { panelid: new BinData(3, "qZ8PQdmDv0+K500wnj6skA==") }

我尝试了各种Linq表达式,但都没有用。

queryable.Where(x => x.Guid.ToString() == guid.ToString())

抛出异常:“无法确定表达式的序列化信息:x.Guid.ToString()。”

queryable.Where(x => x.Guid == new BsonBinaryData(guid));

抛出异常:“不支持的where子句:((BsonBinaryData)x.Guid == UuidLegacy:0x24f7ceb84f06d143b6426e8f01cb7825)。”

我如何申请文件?

注意:我需要使用IQuerable,不能使用Mongodb查询。

0 个答案:

没有答案