联接与AsQueryable <t>()集合上的任何结果都不匹配

时间:2018-08-10 14:31:44

标签: c# mongodb mongodb-csharp-2.0

MongoDB模型

public class Entity1
{
 [BsonRepresentation(BsonType.ObjectId)]
  public string Id { get; set; }
// other properties
}

public class Entity2
{
 [BsonRepresentation(BsonType.ObjectId)]
  public string Id { get; set; }

  public string Entity1Id { get; set; }
}

现在两个集合实际上都有匹配的记录,但是下面的联接查询返回0条记录

from x in this.Entity1Collection.AsQueryable<Entity1>()
join y in this.Entity2Collection.AsQueryable<Entity2>() on y.Entity1Id 
equals x.Id

我发现,由于y.Entity1Idstringx.IdObjectId,所以连接条件大体上是不匹配的。但是MongoDB文档说[BsonRepresentation(BsonType.ObjectId)]编写了ObjectId,而读取给出string时,条件连接实际上应该匹配。

我知道,如果我更改Entity2并使Entity1IdObjectId的话,我可以解决此问题,但是除了直接更改实体类之外,还有其他解决方案吗?

有什么方法可以将查询表达式中的字符串转换为ObjectId,例如on ObjectId.Parse(y.Entity1Id) equals x.Id ??

任何想法。请提出建议。

1 个答案:

答案 0 :(得分:0)

How to perform $lookup between Stringified id and ObjectId in mongo?

此问题中有关在mongo框架中无法进行强制转换的评论暗示,如果不更改您所说的类型,此操作将无法进行。