使用异步编程进行投影

多伊

我将异步编程引入到我现有的代码库中,并且在对 GetStudents() 的结果调用 Select() 时遇到了一些问题 - 收到的错误消息如下“Task<List<ApplicationUser>>不包含 Select 的定义”。我认为这将是由于不正确的语法,但任何指导将不胜感激 - 谢谢。

   public async Task<List<ApplicationUser>> GetStudents()
    {
        return await Task.Run(() => _context.Users.ToList());
    }


    public async Task<StudentIndexViewModel> CreateStudentRegisterViewModel()
    {
        var model = new StudentIndexViewModel();
        var students = await _studentRepo.GetStudents().
            Select(x => new StudentViewModel
            {
                Forename = x.Forename,
                Surname = x.Surname
            }).ToListAsync();

        model.Students = students;

        return model;
    }
卡米洛·特雷文托

至于有人提到,错误来自于试图调用SelectTask<T>,这是无效的。然而,问题远不止于此。该代码目前正在从数据库中获取整个表,只是为了从内存中的结果获取一些值这在数据库和应用程序服务器中都是一种处理时间的浪费。
不仅如此,使用线程池线程只是为了等待 I/O 操作也是一种浪费。

总的来说,代码应该是这样的。

public async Task<List<ApplicationUser>> GetApplicationUsersAsync()
{
    // use Entity Framework properly with ToListAsync
    // this returns the entire table
    return await _context.Users.ToListAsync();
}

public async Task<List<StudentViewModel>> GetStudentsAsync()
{
    // use Entity Framework properly with ToListAsync
    return await _context.Users
        // this only returns the 2 needed properties
        .Select(x => new StudentViewModel
        {
            Forename = x.Forename,
            Surname = x.Surname
        })
        .ToListAsync();
}


public async Task<StudentIndexViewModel> CreateStudentRegisterViewModel()
{
    var model = new StudentIndexViewModel();
    model.Students = await _studentRepo.GetStudentsAsync();

    return model;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用GeoTools进行坐标投影

来自分类Dev

使用Ramda处理异步编程

来自分类Dev

何时对委托使用异步编程?

来自分类Dev

关于使用Async和Await C#进行异步编程的问题

来自分类Dev

如何使用LINQ从多个序列进行投影?

来自分类Dev

使用find()方法进行投影时出错

来自分类Dev

使用findandmodify进行数组投影

来自分类Dev

使用find()方法进行投影时出错

来自分类Dev

使用 Slick 进行类型化投影

来自分类Dev

使用异步在mongodb查询投影中的不同行为

来自分类Dev

使用调度,异步编程使代码块等待

来自分类Dev

如何在异步编程中使用等待,异步和任务

来自分类Dev

如何使用linq进行异步

来自分类Dev

使用AngularJS进行异步验证

来自分类Dev

使用Promise进行异步递归

来自分类Dev

使用Ajax进行异步注释

来自分类Dev

使用协议进行异步响应

来自分类Dev

如何进行异步编程,但将其隐藏在Python中?

来自分类Dev

解析JSON响应以进行列表视图异步编程

来自分类Dev

使用scons进行识字编程

来自分类Dev

使用JTAG接口进行编程

来自分类Dev

使用GOMAXPROCS进行并行编程

来自分类Dev

使用python进行线性编程

来自分类Dev

使用pthread进行cuda编程

来自分类Dev

使用Pthread进行并行编程

来自分类Dev

使用uml进行Java编程

来自分类Dev

使用execvp进行c编程

来自分类Dev

使用opengl进行网格物体的相机投影

来自分类Dev

使用OpenGL进行多边形的透视投影