Dapper에서 비 프리미티브 유형의 객체를 가져 오는 생성자 사용

.net c# constructor dapper

문제

나는 dapper를 사용하여 다음과 같은 객체를 읽는다 :

class MonthlyData {
    public ValueOverride One {get;}
    public ValueOverride Two {get;}
    ...
    public ValueOverride Ten {get;}
    public MonthlyData(
        ValueOverride a
    ,   ValueOverride b
    ,   ...
    ,   ValueOverride j
    ) {
        One = a;
        Two = b;
        ...
        Ten = j;
    }
}

목표 클래스의 생성자는 다음과 같이 정의 된 비 기본 유형 ValueOverride 의 여러 매개 변수를 사용합니다.

class ValueOverride {
    public decimal Val {get;}
    public bool IsOverride {get;}
    public ValueOverride(decimal v, bool flag) {
        Val = v;
        IsOverride = flag;
    }
}

나는 다음과 같이 데이터를 읽는다.

var res = conn.Query<dynamic>(
    @"SELECT
          COALESCE(o.A, d.A) AS a
      ,   CAST( CASE WHEN o.A IS NOT NULL THEN 1 ELSE 0 END AS bit) AS aFlag
      ,   ...
      FROM MonthlyData d
      LEFT OUTER JOIN MonthlyOverride o
                   ON d.Month = o.Month"
).Select(r =>
    new MonthlyData(
        new ValueOverride(r.a, r.aFlag)
    ,   new ValueOverride(r.b, r.bFlag)
    ,   ...
    ,   new ValueOverride(r.j, r.jFlag)
    )
);

이 코드는 많은 반복을 필요로하기 때문에 반복적 인 접근 방법이 적은지 궁금합니다.

수락 된 답변

주요 문제는 같은 방법으로 처리하려는 열이 많다는 것입니다.

가능한 경우 다음을 수행 할 것을 권장합니다.

  1. 데이타베이스 측의 피벗 해제. 열 (day?), 값 및 플래그 목록을 가져 오며 값이 많은 행은 가져 오지 않습니다. (이것은 이미 실제 데이터 모델의 경우 일 수 있습니다)
  2. Select 사용하여 모든 값을 변환하고 컬럼을 플래그 Select .
  3. 해당 데이터를 함께 피벗 ( GroupBy )하여 원래 형식과 클래스의 필수 형식으로 되돌립니다.


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.