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?