C# C中异步方法的返回类型#
我正在编写一个方法来删除员工贷款计划。这意味着我必须删除结果集,它是一个列表。我读到List.Clear()可以删除列表。我有一个来自接口的自定义方法存储库,它是异步的,返回IEnumerable。我遇到的问题是删除列表后异步方法的返回类型 无法从用法推断方法“Task.FromResult(TResult)”的类型参数。尝试显式指定类型参数C# C中异步方法的返回类型#,c#,entity-framework,asp.net-mvc-5,C#,Entity Framework,Asp.net Mvc 5,我正在编写一个方法来删除员工贷款计划。这意味着我必须删除结果集,它是一个列表。我读到List.Clear()可以删除列表。我有一个来自接口的自定义方法存储库,它是异步的,返回IEnumerable。我遇到的问题是删除列表后异步方法的返回类型 无法从用法推断方法“Task.FromResult(TResult)”的类型参数。尝试显式指定类型参数 公共任务DeleteEmployeeSchedule(字符串employeeId,字符串LoantySpecode) { var scheduleList
公共任务DeleteEmployeeSchedule(字符串employeeId,字符串LoantySpecode)
{
var scheduleList=_repository.FindBy(e=>e.EmployeeId==EmployeeId&&e.LoanTypeCode==LoanTypeCode).Result.ToList();
scheduleList.Clear()
返回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;
}
public异步任务DeleteEmployeeSchedule(字符串employeeId,字符串loantypecode)
{
var scheduleList=_repository.FindBy(e=>e.EmployeeId==EmployeeId&&e.LoanTypeCode==LoanTypeCode).Result.ToList();
scheduleList.RemoveAll(employee=>employee.EmployeeId==EmployeeId);
wait_repository.DbContext.saveChangesSync();
返回true;
}
您有一些语法错误,缺少Task.FromResult()的参数代码>传入布尔值将回答您的问题
将行更改为:returntask.FromResult(true)代码>将修复错误消息
此外,您可以重构调用以使用'wait:
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);
}
scheduleList
包含与您的条件匹配的实体,将它们从该列表中删除或调用.Clear()
不会影响DbContext中的实体。您必须调用DbContext来删除,如下所示:
_repository.DbContext.Schedule.RemoveRange(scheduleList);
然而,.Schedule
是一个假设,因为我们不知道您的_存储库是什么样子的,.DbContext
到底是什么数据类型,以及您的DbContext
实现中的DbSet
是什么。没有人会读取异常消息。无法从用法推断方法“Task.FromResult(TResult)”的类型参数意味着编译器无法从用法推断方法“Task.FromResult(TResult)”的类型参数。您的Task.FromResult()
没有参数,它必须有bool
类型的参数。如何从scheduleList
返回bool
?List.Clear()
只会清除列表的内容。它不会从源存储库中删除记录。您的代码正在创建一个新列表,然后将其清除,但它没有进行任何有意义的更改。使用RemoveAnge或remove all如何?@lutakyn,您可以显示您的存储库吗?“将确实删除”-不,它没有。@Enigmativity您看不到返回类型无法保证它是System.Collections.Generic.list它可以,据我们所知,它是一个自定义类,在clear上保持更改。我们也不知道存储库类型是否是围绕DbContext的自定义实现。@Tomek我打赌结果是IEnumerable
和LINQ。ToList()
扩展正在返回List
,因此Clear()
将不起任何作用。@vasily.sib fairenough@Tomek另外,你能添加一个正确的代码吗(使用async/await
)来自问题,以防将来有人会发现这个问题?
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;
}
_repository.DbContext.Schedule.RemoveRange(scheduleList);