我有一个单一的MongoDB集合,其中包含三个不同类别(A、B、C)的文档,它们都继承自共同的D类。
使用官方的C#驱动程序,我插入了所有三种类型(A、B、C)的文档,并且它们都正确显示_t鉴别器,在我的代码中它们的类映射已注册。
如果我发出诸如以下的LINQ查询(使用VB):
dim Result = database.GetCollection("mycol").AsQueryable(Of C).Where(some where clause)
如果我数一下这个结果,就会出现一个错误:“元素'来自类A的一个元素名称'与类C的任何字段或属性都不匹配。”
在
AsQueryable(Of C)
代码中,鉴别器难道不是应该起作用吗?看起来当我发出.Count
时,我的Where子句(特定于类C的元素)正在应用于A、B和C类的文档。我尝试添加
.OfType(Of C)
但没有效果,尝试先使用.ToList
转换为List,但仍然出现相同的错误。有什么想法吗?背景:我的客户端代码通常处理D类型的对象。A、B、C共享许多从D继承的公共属性,我想在其上建立索引,因此将它们放在一个单独的集合中。然而,在特殊情况下,我偶尔需要直接引用A、B或C类型的对象。