繁体   English   中英

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

[英]Return Type for Async Method in C#

我正在编写一个删除员工贷款时间表的方法。这意味着我必须删除结果集,它是一个列表。 我读到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;
  }

你有一些语法错误,你缺少Task.FromResult();的参数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是一个假设,因为我们不知道你的.DbContext是什么样子, .DbContext究竟是什么数据类型以及你的DbSet<>在你的DbContext实现中是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM