这就是我过去在 Entity Framework (POCO) 中使用继承的方式:
ctx.Animals // base class instances (all instances)
ctx.Animals.OfType<Cat> // inherited class Cat's instances only
ctx.Animals.OfType<Dog> // inherited class Dog's instances only
这是我在 MongoDb ( MongoDb reference ) 中发现的唯一类似方式:
var query = Query.EQ("_t", "Cat");
var cursor = collection.FindAs<Animal>(query);
请注意,在后一种情况下,我必须处理鉴别器(“_t”)并对我的类名进行硬编码,这不太方便而且看起来很糟糕。如果我错过了查询,我会在枚举尝试时遇到异常。我错过了什么吗?我的建议是“按原样”存储对象的文档 Db 应该可以轻松处理继承。
最佳答案
假设您的鉴别器正在运行(_t 为每个文档正确存储)那么我认为这就是您要寻找的。
var results = collection.AsQueryable<Animal>().OfType<Cat>
仅返回“Cat”类型的文档。
关于c#-4.0 - MongoDb 中的继承 : how to request instances of defined type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10405887/