我有一个 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
特定于 C 类元素的 Where 子句时,它正在应用于 A、B 和 C 的文档。
我尝试添加.OfType(Of C)
但没有效果,尝试先使用 转换为列表.ToList
,但我继续收到相同的错误。有任何想法吗?
作为背景,我的客户端代码通常会处理 D 类型的对象。A、B、C 共享许多从 D 继承的公共属性,我想在这些属性上放置索引,因此我将它们放在一个集合中。但是,有时我需要在特殊情况下直接引用 A、B 或 C 类型的对象。