C#中异步方法的返回类型

时间:2018-11-01 05:39:42

标签: c# entity-framework asp.net-mvc-5

我正在编写一种删除员工贷款计划的方法。这意味着我必须删除结果列表。我了解到 List.Clear()可以删除列表。我有一个来自接口的自定义方法存储库,该方法是异步的,并返回 IEnumerable 。我的问题是删除列表后异步方法的返回类型。错误是

  

无法从用法中推断出方法'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 :(得分:-2)

您有一些语法错误,您缺少传递布尔值的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);
}  

编辑: 在没有看到更多代码的情况下,例如_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是什么