2015-08-24 1 views
3

Using C# MongoDB LINQ with discriminator описывает то, что я пытаюсь сделать, но я пытаюсь использовать новый официальный драйвер 2.0.1.Использование драйвера C# MongoDB v2 с дискриминатором и полиморфизмом

У меня есть серия подклассов со своими специализированными свойствами, все наследуются от базового класса, содержащего общие свойства. Атрибуты дискриминатора кажутся прекрасными, и я успешно сохранил смесь документов, используя подтипы.

То, что я ожидал, чтобы быть в состоянии сделать следующий был запрос похож на:

var subsetB = db.GetCollection<BaseClass>("Documents").AsQueryable<BaseClass>().OfType<SubclassB>(); 

Чтобы получить все документы типа SubclassB. Однако методы AsQueryable() и OfType(), упомянутые в документации и статьях, которые я нашел, похоже, недоступны.

Я что-то пропустил или есть альтернативный рекомендуемый метод достижения этого с помощью нового драйвера?

ответ

2

Для этого нет специальной поддержки.

Вам необходимо явно добавить фильтр для поля дискриминатора, _t.

var results = await collection.Find(Builders<SubclassB>.Filter.Eq("_t", nameof(SubclassB))).ToListAsync(); 
+0

Спасибо за это - вы помогли мне решить основную проблему. Тем не менее, мне было бы лучше, пока я использую драйвер версии 1, потому что это, похоже, охвачено множеством примеров, сообщениями в блогах и т. Д. Я нахожу драйвер v2 с его асинхронной моделью программирования, которой очень сложно справиться с новичком в MongoDB. Я бы приветствовал рекомендацию по этому вопросу. –

+0

@BobGear хорошо, это действительно зависит от вас. Старая версия устарела, и она не поддерживает async-wait. Если вас это не волнует, я думаю, вы можете подождать, прежде чем двигаться дальше, пока не появится больше информации. Есть также бесплатные онлайн-курсы MongoDB, которые вы можете взять. – i3arnon