首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架效率

实体框架效率
EN

Stack Overflow用户
提问于 2018-07-28 04:14:01
回答 1查看 59关注 0票数 0

我正在尝试获取给定页面索引和页面大小的课程列表。这是我的行动方法:

代码语言:javascript
复制
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;
}

在这个过程中,我首先获取所有的课程并过滤它们,并且只获取我需要的列。然后我会把名单和总数还给你。

这是一个有效的方法吗?否则,我必须编写两个查询来获取总数和过滤的结果。如果有更好的方法,请告诉我。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-28 12:36:59

我首先获取所有的课程并过滤它们,只获取我需要的列。

不,你没有。本声明如下:

代码语言:javascript
复制
var allCourses = from s in _Context.Courses
                     select s;

创建查询(IQueryable),而不是集合。在强制枚举查询之前,EF不会将查询转换为SQL查询并将其发送到数据库。在这里,当您运行.ToListAsync()时会发生这种情况。

这是一个有效的方法吗?

只要数据库中有一个唯一的名称索引,这是相当有效的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51567967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档