Posso retornar uma coleção de vários tipos Derivados da consulta Dapper

Eu tenho uma estrutura de classes semelhante a esta:

public abstract class Device
{
    public int DeviceId { get; set; }
    //Additional Properties
}

public class DeviceA : Device
{
    //Specific Behaviour
}

public class DeviceB : Device
{
    //Specific Behaviour
}

Eu preciso recuperar uma lista de dispositivos ou um único dispositivo que é instanciado como o tipo derivado apropriado (com base em um valor de tipo no registro de dispositivo no banco de dados). Ou seja, a coleção deDevice objetos devem conter um número de objetos com diferentes tipos, todos derivados deDevice.

Eu implementei isso da seguinte maneira, mas algo não parece certo sobre isso.

public static IEnumerable<Device> AllDevices()
{
    using (var connection = CreateConnection())
    {
        connection.Open();
        return connection.Query<dynamic>("SELECT * FROM Device").Select<dynamic, Device>(d =>
            {
                Device device = null;
                if (d.DeviceTypeID == 1)
                    device = new DeviceA();
                else if (d.DeviceTypeID == 2)
                    device = new DeviceB();
                else throw new Exception("Unknown Device");
                device.DeviceId = d.DeviceID;
                return device;
            });
    }
}

Esta é a maneira correta de conseguir isso usando Dapper, ou existe uma abordagem melhor?

questionAnswers(2)

yourAnswerToTheQuestion