Тип возврата для асинхронного метода в C # - PullRequest
0 голосов
/ 01 ноября 2018

Я пишу метод для удаления графика ссуды сотрудникам. Это означает, что я должен удалить набор результатов, который является списком. Я прочитал, что List.Clear () может удалить список. У меня есть пользовательский метод хранилище из интерфейса, который является асинхронным и возвращает IEnumerable . Проблема у меня есть тип возврата асинхронного метода после удаления списка. Ошибка get

Аргументы типа для метода Task.FromResult (TResult) не могут быть выведены из использования. Попробуйте указать аргументы типа явно.

public Task<bool> DeleteEmployeeSchedule(string employeeId, string loantypecode)
{
 var scheduleList =    _repository.FindBy(e => e.EmployeeId == employeeId && e.LoanTypeCode == loantypecode).Result.ToList();
 scheduleList.Clear()
 return  Task.FromResult();
}

Привет, ребята, я снова изменил код. На этот раз элементы в списке не были удалены. Означает ли это, что RemoveAll () не удаляет записи из базы данных. Приведенный ниже код не удаляет записи.

public async Task<bool> DeleteEmployeeSchedule(string employeeId, string loantypecode)
  {
    var scheduleList =    _repository.FindBy(e => e.EmployeeId == employeeId && e.LoanTypeCode == loantypecode).Result.ToList();
    scheduleList.RemoveAll(employee => employee.EmployeeId == employeeId);
    await _repository.DbContext.SaveChangesAsync();
    return  true;
  }

1 Ответ

0 голосов
/ 01 ноября 2018

у вас есть какая-то синтаксическая ошибка, вам не хватает параметров для Task.FromResult();, передав логическое значение, ответит на ваш вопрос.

измените вашу строку на: return Task.FromResult(true); исправит ваше сообщение об ошибке.

Кроме того, вы можете реорганизовать свой вызов для использования `await:

public async Task<bool> DeleteEmployeeSchedule(string employeeId, string loantypecode)
{
     var scheduleList = (await _repository.FindBy(e => e.EmployeeId == employeeId && e.LoanTypeCode == loantypecode).ToList();

     scheduleList.Clear()

     //NOTE: however your error occurred on the line below due to wrong syntax, you have to pass in a boolean value eg. true/false
     return Task.FromResult(true);
}  

EDIT : Не видя больше кода, например, какой тип данных у вас _repository и как он реализован, мы должны предполагать слишком много вещей ... Как указано в одном из комментариев, это не будет сохраняться в базе данных.

EDIT2: @lutakyn опубликовал следующие изменения кода в качестве комментария ( обновите ваш первоначальный пост с обновленным кодом )

public async Task<bool> DeleteEmployeeSchedule(string employeeId, string loantypecode) 
{
    var scheduleList = (await _repository.FindBy(e => e.EmployeeId == employeeId && e.LoanTypeCode == loantypecode)).ToList();

    scheduleList.RemoveAll(employee => employee.EmployeeId == employeeId);
    await _repository.DbContext.SaveChangesAsync();
    return true;
}

scheduleList содержит объекты, соответствующие вашим критериям, удаление их из этого списка или вызов .Clear() не повлияет на объекты в вашем DbContext. Вы должны позвонить на ваш DbContext удалить как:

_repository.DbContext.Schedule.RemoveRange(scheduleList);

Однако .Schedule является предположением, поскольку мы не знаем, как выглядит ваш _repository, каков тип данных .DbContext и каков ваш DbSet<> в вашей реализации DbContext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...