동적 속성 값 가져 오기

.net-4.5 dapper oracle11g

문제

쿼리가 될 테이블이 런타임까지 알려지지 않았기 때문에 Dapper를 동적으로 사용하므로 POCO 클래스를 사용할 수 없습니다.

Dapper의 결과를 WebAPI를 통해 반환합니다. 대역폭을 절약하기 위해 속성 이름이 아닌 Dapper의 값만 반환해야합니다. 예 :

{
    7,"2013-10-01T00:00:00",0,"AC",null,"ABC","SOMESTAGE"
},...

그리고 아닙니다 :

{
TID: 7,
CHANGE_DT: "2013-10-01T00:00:00",
EFFECTIVE_APPTRANS: 0,
EFFECTIVE_APPTRANS_STATUS: "AC",
DEVICE: null,
PROCESS: "ABC",
STAGE: "SOMESTAGE"
},...

이 작업을 수행하는 합리적인 방법을 찾는 데 문제가 있습니다. Dapper의 매핑 기능을 악용했습니다.

var tableData = Database.Query<dynamic, dynamic, dynamic>(connectInfo, someResource.sql,
    (x, y) =>
    {
        List<object> l = new List<object>();
        object o = x;

        foreach(var propertyName in o.GetType().GetProperties().Select(p => p.Name)) {
            object value = o.GetType().GetProperty(propertyName).GetValue(o, null);
            l.Add(value);
        }
        return l as dynamic;
    },
    new {implantId, pendingApptrans},
    splitOn: "the_last_column");

Dapper가 동일한 기본 코드를 사용하여 List를 반환하도록 시도했습니다.

아이디어는 map 함수 내에서 속성 값을 추출한다는 것이 었습니다. 왜냐하면 아무 것도 반환되기 전에 행을 가지고 놀 수 있었기 때문에 오류없이 빈 결과를 얻었습니다.

[
    [ ], [ ], [ ], [ ], [ ], [ ], [ ]
]

또한 매핑 기능에서 원하는 분할 할 열 이름을 모르겠습니다. 그러나 테스트 쿼리에서 마지막 열 이름을 입력하더라도 결과는 같습니다.

Dapper의 동적 반환 값에서 값만 반환하려면 어떻게해야합니까? Dapper 호출 후 동적으로 사후 처리를해야합니까?

수락 된 답변

특정 요구 사항에 대해서는 예 후 처리가 필요합니다. 예를 들어 DapperRow 또는 IDictionary<string,object> 캐스팅 할 수 있습니다. 또는, 이제는 dapper가 노출하는 IDataReader API를 사용할 수 있습니다.



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