2015-02-16 2 views

ответ

4

Вы должны использовать метод Projection на IFindFluent (что Find и Projection Обратно):

var findFluent = Collection.Find(query).Projection(Fields<MealPlan>.Exclude (plan => plan.Meals)) 

Теперь это в конечном итоге сформировать курсор BsonDocument с, так как он не знает, как проекция выглядит. Вы можете вызвать родовую Projection вместо того, чтобы добавить этот тип:

var findFluent = Collection.Find(query).Projection<MealPlan>(Fields<MealPlan>.Exclude (plan => plan.Meals)) 

В более общем смысле (что менее актуально при использовании Exclude), можно также указать поля с помощью лямбда-выражения:

var findFluent = Collection.Find(query).Projection(plan => plan.Meals) 
+0

Спасибо. Я знаю, что драйвер находится в бета-версии, но будет ли общий дизайн поддержки абстрактными классами? Я предполагаю, что сериализатор имеет доступ к дискриминатору для определения конкретного типа. – Graeme

+0

Что именно вы имеете в виду? –

+0

@Graeme Вы имеете в виду что-то вроде 'Collection.Find (query) .Projection (Fields.Include (" _ id "))'? Нет, он не будет работать, поскольку он пытается создать экземпляр из 'AbstractPlan'. Он может работать, если базовый класс не является абстрактным, но экземпляр будет иметь базовый класс, а не конкретный тип. – i3arnon

Смежные вопросы