Давайте поразмыслим из предоставленной подписи. Во-первых, это выглядит как перегрузка, в противном случае 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>
функция, которая получает 2 параметра, один из типов 'TFirst' и другой типа' TSecond', и возвращает объект типа 'TReturn' –