Код: Выделить всё
public async Task GetMultipleAsync(string storedProcedure, U parameters, List types)
{
var result = new List();
try
{
using (var multi = await _connection.QueryMultipleAsync(storedProcedure, parameters, commandType: CommandType.StoredProcedure, transaction: _transaction))
{
foreach (var type in types)
{
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List))
{
// Handle list types
var elementType = type.GetGenericArguments()[0];
var method = typeof(SqlMapper.GridReader)
.GetMethods()
.FirstOrDefault(m => m.Name == nameof(SqlMapper.GridReader.ReadAsync) &&
m.IsGenericMethod);
var genericMethod = method.MakeGenericMethod(elementType);
var task = (Task)genericMethod.Invoke(multi, null);
await task.ConfigureAwait(false);
var resultProperty = task.GetType().GetProperty("Result");
var data = resultProperty.GetValue(task);
result.Add(data);
}
else
{
// Handle single value types
var method = typeof(SqlMapper.GridReader)
.GetMethods()
.FirstOrDefault(m => m.Name == nameof(SqlMapper.GridReader.ReadSingleAsync) &&
m.IsGenericMethod);
var genericMethod = method.MakeGenericMethod(type);
var task = (Task)genericMethod.Invoke(multi, null);
await task.ConfigureAwait(false);
var resultProperty = task.GetType().GetProperty("Result");
var data = resultProperty.GetValue(task);
result.Add(data);
}
}
}
}
catch (Exception ex)
{ // Handle exception;
}
return result;
}
Код: Выделить всё
var types = new List
{
typeof(List),
typeof(List),
typeof(long)
};
var resultMultiple = await _dataAccess.GetMultipleAsync(storedProcedure, parameters, types);
Код: Выделить всё
var ListA = resultMultiple[0] as List;
var ListB = resultMultiple[1] as List;
var val = (long)resultMultiple[2];
Подробнее здесь: https://stackoverflow.com/questions/792 ... tipleasync
Мобильная версия