Ao trabalhar com uma hierarquia de tipo polimórfico, sua variável de coleção e suas consultas LINQ devem começar em termos da classe base. Por exemplo, para ler todos os documentos do tipo A do banco de dados, você escreveria:
var collection = database.GetCollection<D>("mycol");
var query = collection.AsQueryable<D>().OfType<A>();
foreach (var a in query)
{
// process document of type A
}
Para fins de diagnóstico, você pode ver a consulta nativa correspondente do MongoDB usando:
var json = ((MongoQueryable<A>)query).GetMongoQuery().ToJson();
Observe que você precisa converter a consulta para um MongoQueryable (não MongoQueryable