我有一个单一的MongoDB集合持有三种不同的类别(A,B,C),这都来自一个共同的D类放大器使用C#MongoDB的LINQ与鉴别
根据官方的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的对象。
克雷格您好,感谢这么多的快速答复。很遗憾没有区别。正如我在原来的帖子中提到的那样,我曾尝试过,但它似乎没有改变任何东西。是否有驱动程序随附的诊断程序,例如是否有可能看到底层查询?就像你可以用一个查询对象(即Query.ToString) – 2012-07-22 03:21:19
我也尝试了'AsQueryable()。OfType(Of C)'而不是'AsQueryable(Of C).OfType(Of C)'并且得到了“No强制运算符定义在类型'MongoDB.Bson.BsonDocument'和'C'之间' – 2012-07-22 03:26:47
还有一点评论:)我询问诊断的原因是我可以使用IMongoQuery发出几乎相同的命令,并且得到正确的结果。我试图使用泛型为我的非MongoDB意识类组成一个通用查询方法,因此LINQ适合这个账单。 – 2012-07-22 03:30:38