En Dapper, ¿qué hace el Func el parámetro del método de mapa se parece a. ¿Hay algún caso de prueba que pueda ver?

c# dapper delegates

Pregunta

He estado intentando implementar la llamada al método de dapper a continuación. No sé cuál es la expectativa para el parámetro del método:

Func<TFirst, TSecond, TReturn> map

para esta llamada 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?))

¿Hay algún caso de prueba que pueda ver? No he encontrado uno todavía.

Respuesta popular

Entendamos en pequeño detalle de la firma proporcionada. En primer lugar, esto parece una sobrecarga, de lo contrario, QueryAsync funciona de la misma manera que Query, solo que es Asynchronous. Esto hubiera tenido más sentido para QueryMultiple

Las partes importantes son:

QueryAsync<TFirst, TSecond, TReturn> - Firma

Func<TFirst, TSecond, TReturn> map - Uso de la firma

Uso de la firma

Task<IEnumerable<TReturn>> - Tipo de devolución

Ahora que está ejecutando la Query , no QueryMultiple , por lo que el retorno de la ejecución Sql sería de un solo tipo, supongo que TReturn , lo que el delegado de Func haría es, hacer algún procesamiento del resultado, lo cual debe hacer suministrando el lógica, algo así como, donde TFirst y TSecond se convierten en tipos enteros, podría ser cualquier tipo de su elección:

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

Debo admitir que estoy algo confundido, sin embargo, ya que para hacer cualquier cosa dentro de la QueryAsync función de los medios de desenvolver la Task , que se devuelve desde la función asíncrono. La mejor solución aquí será:

Ejecute QueryAsync como está:

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; // Hacer esto como una llamada de bloqueo solo por ejemplo

Ahora aplique Func para transformar los valores dentro de IEnumerable<TReturn>



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué