Dapper에서 Func는 무엇을합니까? 지도 메소드 매개 변수는 다음과 같습니다. 내가 볼 수있는 테스트 케이스가 있습니까?

c# dapper delegates

문제

나는 아래의 dapper 메소드 호출을 구현하려고 시도했다. 메서드 매개 변수에 대한 기대치를 모르겠습니다.

Func<TFirst, TSecond, TReturn> map

이 Dapper 호출에 대해

Task<IEnumerable<TReturn>> QueryAsync<TFirst, TSecond, TReturn>(string sql, Func<TFirst, TSecond, TReturn> map, dynamic param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = default(int?), CommandType? commandType = default(CommandType?))

내가 볼 수있는 테스트 케이스가 있습니까? 나는 아직 그것을 발견하지 못했다.

인기 답변

제공된 서명에서 조금 자세히 이해합시다. 첫째로 이것은 과부하처럼 보입니다. 그렇지 않으면 QueryAsync는 Query와 동일한 방식으로 작동합니다. 단지 비동기입니다. 이것은 QueryMultiple 더 의미가 QueryMultiple

중요한 부분은 다음과 같습니다.

QueryAsync<TFirst, TSecond, TReturn> - 서명

Func<TFirst, TSecond, TReturn> map - 서명의 사용법

서명 사용

Task<IEnumerable<TReturn>> - 반환 형식

이제 QueryMultiple 아닌 Query 실행하고 있으므로 SQL 실행의 반환이 단일 유형 일 TReturn Func 대리인이 수행 할 TReturn 은 결과 처리를 수행하는 것으로 가정합니다. 논리, TFirst와 TSecond가 정수형이 될 때, 당신이 선택한 어떤 유형이든 상관 없습니다 :

Func<int,int,TReturn> func = (a,b) => { use a,b values to filter the values in IEnumerable<Treturn> fetched and return the same }

QueryAsync 함수 내부의 Task 을 수행하면 Async 함수에서 반환되는 Task 래핑을 해제한다는 것을 의미하므로 혼동을 거의 QueryAsync 않습니다. 더 나은 해결책은 다음과 같습니다.

QueryAsync를 다음과 같이 실행하십시오.

Task<IEnumerable<TReturn>> QueryAsync<TReturn>(string sql, dynamic param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = default(int?), CommandType? commandType = default(CommandType?))

var result = connection.QueryAsync<TReturn>(sql).Result; // 예를 들어 차단 호출로 만듭니다.

이제 Func 을 적용하여 IEnumerable<TReturn> 내부의 값을 변환합니다. IEnumerable<TReturn>



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow