Czy mogę zwrócić kolekcję wielu pochodnych typów z zapytania Dapper

Mam strukturę klasową podobną do tej:

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

public class DeviceA : Device
{
    //Specific Behaviour
}

public class DeviceB : Device
{
    //Specific Behaviour
}

Muszę pobrać listę urządzeń lub pojedyncze urządzenie, które jest tworzone jako odpowiedni typ pochodny (na podstawie wartości typu w rekordzie urządzenia w DB). To jest zbiórDevice obiekty powinny zawierać wiele obiektów o różnych typach, z których wszystkie pochodząDevice.

Zaimplementowałem to w następujący sposób, ale coś po prostu nie pasuje do tego.

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

Czy jest to właściwy sposób na osiągnięcie tego za pomocą Dappera, czy jest lepsze podejście?

questionAnswers(2)

yourAnswerToTheQuestion