SQL 쿼리와 함께 dapper 인터페이스 (IDBConnection)에서 automapper를 사용하는 방법

.net-core asp.net-mvc c# dapper

문제

public IEnumerable<voucher> index(string word, string DivisionCode, string yearlabel, int pageno)
        {
            using (IDbConnection dbConnection = Connection)
            {
                var data = dbConnection.Query<fydates>(@"SELECT REPLACE(CONVERT(NVARCHAR(10),fystart,6),' ','-') as fystart,
                REPLACE(CONVERT(NVARCHAR(10),fyend,6),' ','-') as fyend FROM fydates WHERE yearlabel = @yearlabel",
                new { yearlabel = yearlabel }).Single();

                List<voucher> DataQuery = dbConnection.Query<voucher, accounts, division, LockStatus, voucher>(@"SELECT V.id,V.voucherno,
                CASE WHEN V.vouchertype='P' THEN 'Paid' ELSE 'Receipt' END AS vouchertype,
                REPLACE(CONVERT(NVARCHAR(10),V.dated,6),' ','-') AS dated,V.subno,V.amount,COALESCE(V.syscreated,' ') AS syscreated,V.bankcode,
                COALESCE(V.cheqno,' ') AS Cheqno,V.Cheqdate,V.posted,V.currency,A.id as accountsid,A.achead,A.shortname,
                D.id as divisionid,D.divname,D.divncode,L.id as lockstatusid,L.name FROM voucher V
                LEFT JOIN Accounts A ON V.bankcode = A.mainac
                LEFT JOIN divisionmst D ON V.divisionid = D.divncode
                LEFT JOIN LockStatus L ON V.posted=L.Type
                WHERE (V.voucherno + V.Subno+V.cheqno + A.achead + LEFT(yearvoucherno,3) LIKE @word AND
                D.divncode LIKE @DivisionCode) AND (dated BETWEEN @fystart AND @fyend OR dated='31-Mar-49')
                Order By V.id DESC OFFSET @pageno *25 ROWS FETCH NEXT 25 ROWS only",
                (voucher, accounts, division, LockStatus) =>
                {
                    voucher.accounts = accounts;
                    voucher.division = division;
                    voucher.LockStatus = LockStatus;
                    return voucher;
                },
                new { word = word, fystart = data.fystart, fyend = data.fyend, DivisionCode = DivisionCode, pageno = pageno - 1 },
                splitOn: "accountsid, divisionid, lockstatusid").ToList();
                return DataQuery;
            }
        }

이전 시나리오에서는 JOINS 쿼리에서 spliton을 사용하여 매핑 기술을 사용했지만 완벽하게 작동했습니다. 하지만 병합 쿼리 나 케이스의 경우에는 내가 조건을 정했을 때 나는 어디에서 스플릿 닝해야하는지 결정할 수 없다. 위의 경우와 같이 조건이 나뉘었을 때 결합과 사례를 말할 수 있습니다.

인기 답변

Dapper가 분할 할 위치를 쉽게 알 수 있도록 더미 열을 추가하기 만하면됩니다. 더미 열이 null의 경우, 관련 지을 수 있었던 오브젝트는 null가됩니다. 더미 열은 대상 객체에 존재하지 않아도됩니다.

select
--first object
1 AS Id,
(1+1) AS APropertyAssociatedToYourFirstObject,
(1+1) AS ADifferentPropertyAssociatedToYourFirstObject,

--second object (assuming you are splitting on Id)
1 AS Id,
(1+1) AS APropertyAssociatedToYourSecondObject,
(1+1) AS ADifferentPropertyAssociatedToYourSecondObject
from YourTable

또한 이렇게 정렬하면 시간을 절약 할 수 있습니다.



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