Могу ли я вернуть коллекцию из нескольких производных типов из запроса Dapper
У меня есть структура класса, похожая на эту:
public abstract class Device
{
public int DeviceId { get; set; }
//Additional Properties
}
public class DeviceA : Device
{
//Specific Behaviour
}
public class DeviceB : Device
{
//Specific Behaviour
}
Мне нужно получить список устройств или отдельное устройство, которое создается как соответствующий производный тип (на основе значения типа в записи устройства в БД). То есть коллекцияDevice
Объекты должны содержать несколько объектов с разными типами, все из которых являются производными.Device
Я реализовал это следующим образом, но что-то просто неЯ не чувствую себя правильно об этом.
public static IEnumerable AllDevices()
{
using (var connection = CreateConnection())
{
connection.Open();
return connection.Query("SELECT * FROM Device").Select(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;
});
}
}
Это правильный способ добиться этого с помощью Dapper, или есть лучший подход?