我正在尝试获取给定页面索引和页面大小的课程列表。这是我的行动方法:
public async Task<ActionResult<object>> Get(int? page, int? pageSize)
{
page = page == null || page < 0 ? 0 : page;
pageSize = pageSize == null || pageSize < 1 ? 5 : pageSize;
var skipFrom = (int)(page * pageSize);
var allCourses = from s in _Context.Courses
select s;
var courseList = await allCourses
.OrderBy(t => t.Name)
.Skip(skipFrom)
.Take((int)pageSize)
.Select(c => new
{
c.Id,
c.Name,
c.CourseCode,
})
.AsNoTracking()
.ToListAsync();
var result = new
{
courses = courseList,
count = allCourses.Count()
};
return result;
}在这个过程中,我首先获取所有的课程并过滤它们,并且只获取我需要的列。然后我会把名单和总数还给你。
这是一个有效的方法吗?否则,我必须编写两个查询来获取总数和过滤的结果。如果有更好的方法,请告诉我。谢谢。
发布于 2018-07-28 12:36:59
我首先获取所有的课程并过滤它们,只获取我需要的列。
不,你没有。本声明如下:
var allCourses = from s in _Context.Courses
select s;创建查询(IQueryable),而不是集合。在强制枚举查询之前,EF不会将查询转换为SQL查询并将其发送到数据库。在这里,当您运行.ToListAsync()时会发生这种情况。
这是一个有效的方法吗?
只要数据库中有一个唯一的名称索引,这是相当有效的。
https://stackoverflow.com/questions/51567967
复制相似问题