¿Puedo devolver una colección de varios tipos derivados de la consulta de Dapper?

Tengo una estructura de clase similar 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
}

Necesito recuperar una lista de dispositivos, o un solo dispositivo que se cree como el tipo derivado apropiado (basado en un valor de tipo en el registro de dispositivo en la base de datos). Es decir, la colección deDevice los objetos deben contener una serie de objetos con diferentes tipos, todos los cuales se derivan deDevice.

He implementado esto de la siguiente manera, pero algo no se siente bien al respecto.

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;
            });
    }
}

¿Es esta la forma correcta de lograr esto usando Dapper, o hay un mejor enfoque?