【发布时间】:2014-12-24 01:55:15
【问题描述】:
我有一个 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 转换为列表,但我继续收到相同的错误。有任何想法吗?
作为背景,我的客户端代码通常会处理 D 类型的对象。A、B、C 共享许多从 D 继承的公共属性,我想在这些属性上放置索引,因此我将它们放在一个集合中。但是,有时在特殊情况下,我需要直接引用 A、B 或 C 类型的对象。
【问题讨论】:
标签: c# linq mongodb discriminator