에서 여러 파생 된 형식의 컬렉션을 반환 할 수 파생 형식 (DB의 장치 레코드에있는 Type 값을 기반으로 함). 즉, Device
개체의 컬렉션에는 Device
에서 파생 된 여러 유형의 개체가 포함되어야합니다.이 나는이 유사한 클래스 구조를 가지고 단정 한 쿼리
나는 이것을 다음과 같이 구현했지만, 뭔가 딱 들어 맞지는 않습니다.
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;
});
}
}
Dapper를 사용하여이를 달성하는 올바른 방법입니까 아니면 더 나은 방법이 있습니까?
두 개의 별도 쿼리로 쿼리를 분할하면 더 읽기 쉽게 만들 수 있습니다. 하나는 DeviceType 1이고 다른 하나는 deviceType 2입니다. 그런 다음 두 가지 결과 세트를 결합하여 반환합니다. 그러나 그 외에는 좋은 해결책 인 것 같습니다. – DavidEdwards
필자가 찾고있는 것은 아니며, 특히 단일 장치를 검색 할 때 유스 케이스의 경우, 미리 장치 유형을 알지 못하므로 특히 그렇습니다. (예 : 일련 번호 또는 다른 식별자로 기기 가져 오기). 고마워, 데이빗. – GaryJL
이 기능의 진행 과정을 추적하고 싶다면 https://github.com/StackExchange/dapper-dot-net/issues/262 – ajbeaven