rea*_*ist 4 c# asp.net asp.net-core
我有一个异步方法。此方法从数据库中获取 10 行的列表并获取查询结果的总数。因为我用于网格分页。所以,我使用元组,其中一个元素是 List,另一个元素是总数。但由于编译错误,我无法返回结果。我怎么能做到这一点?
public async Task<Tuple<List<IdNamePair>, int> GetStudents(QueryFilter queryObject)
{
var query = studentEntity.Select(p => new IdNamePair
{
ID = p.ID.ToString(),
Name = p.StudentNameSurname
}).ToListAsync();
int totalCount = await query.CountAsync();
query = query.ApplyPaging(queryObject);//like Skip(20).Take(10)
var students = query.ToListAsync();
return await new Tuple<List<IdNamePair>, int>(students, totalCount); //ERROR
}
Run Code Online (Sandbox Code Playgroud)
ToListAsync返回任务,删除它以返回 IQueryable
public async Task<Tuple<List<IdNamePair>, int>> GetStudents(QueryFilter queryObject)
{
var query = studentEntity.Select(p => new IdNamePair
{
ID = p.ID.ToString(),
Name = p.StudentNameSurname
});
int totalCount = await query.CountAsync();
var students = await query.ApplyPaging(queryObject).ToListAsync();
return new Tuple<List<IdNamePair>, int>(students, totalCount);
}
Run Code Online (Sandbox Code Playgroud)
你在这里有一些小错误。
首先是返回类型,int 是在元组之外声明的。把它加进去。
然后,您混合了 await 关键字。在您想要等待异步操作完成的地方使用它。
像这样试试
public async Task<Tuple<List<IdNamePair>, int>> GetStudents(QueryFilter queryObject)
{
var query = studentEntity.Select(p => new IdNamePair
{
ID = p.ID.ToString(),
Name = p.StudentNameSurname
});
int totalCount = await query.CountAsync();
query = query.ApplyPaging(queryObject);//like Skip(20).Take(10)
var students = await query.ToListAsync();
return new Tuple<List<IdNamePair>, int>(students, totalCount);
}
Run Code Online (Sandbox Code Playgroud)
额外 1:您也可以在此处使用较短的元组声明
public async Task<(List<IdNamePair>, int)> GetStudents()
{
...
return (students, totalCount);
}
Run Code Online (Sandbox Code Playgroud)
额外 2:在 C# 7 中,您还可以命名元组项,这使方法的使用者更加清晰
public async Task<(List<IdNamePair> Students, int TotalCount)> GetStudents()
{
...
return (students, totalCount);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7507 次 |
| 最近记录: |