2016-04-01 1 views
0

Я пытаюсь реализовать вызов метода dapper ниже. Я не знаю, что это ожидание для параметра метода:В Dapper, как выглядит параметр метода Func <TFirst, TSecond, TReturn>. Есть ли тестовый сценарий, на который я могу смотреть?

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?)) 

Есть ли тест, что я взгляну на могу? Я еще не нашел его.

+0

функция, которая получает 2 параметра, один из типов 'TFirst' и другой типа' TSecond', и возвращает объект типа 'TReturn' –

ответ

1

Давайте поразмыслим из предоставленной подписи. Во-первых, это выглядит как перегрузка, в противном случае QueryAsync работает так же, как и Query, а именно его асинхронный. Это сделало бы больше смысла для QueryMultiple

важных частей:

QueryAsync<TFirst, TSecond, TReturn> - Подпись

Func<TFirst, TSecond, TReturn> map - Использование Подписи

Использование Подписи

Task<IEnumerable<TReturn>> - Возвращаемый тип

Теперь, когда вы выполняете t он Query, а не QueryMultiple, поэтому возврат выполнения Sql будет только одного типа, я предполагаю, что TReturn, что сделает делегат Func, выполните некоторую обработку результата, что вам нужно сделать, предоставив логику, что-то типа, где 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. Лучше решение здесь должно быть:

Run 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>