猿问

Linq 按 where 语法选择分组

我有这些课程:


User {

    //identity user class

    public IList<Proyecto> Proyectos { get; set; }

    public bool IsImportant { get; set }

}


Proyecto

{

   public Guid Id { get; set; }

   // more properties here    

}

我要做的是按 userId 对他们创建的所有项目进行分组,并且在哪里IsImportant是真的。


我试过这个


  var usuariosRobotVmInDb =await  _dbContext.Users.Include(p=>p.Proyectos)

            .groupby(u=>u.id)

            .Where(u => u.IsImportant== True)

            .Select(x=> new usuariosRobotViewModel

            {

                Id=x.Id,

                Name=x.Name,

                LastName=x.LastName,

                Phone=x.Phone,

                Email=x.Email,

                proyectosVms=x.Proyectos.Select(a=>new ProyectosVm {Id=a.Id,Date=a.Date})


            }).ToListAsync();

但似乎我不能使用 groupBy 和 where 子句......我该如何解决这个问题?谢谢


动漫人物
浏览 99回答 2
2回答

墨色风雨

当您使用导航属性并且项目已经是您的User类的属性时,您不需要按任何内容进行分组。只需检索Important正确的用户:&nbsp;var&nbsp;result&nbsp;=&nbsp;await&nbsp;_dbContext.Users.Include(p&nbsp;=>&nbsp;p.Proyectos) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Where(u&nbsp;=>&nbsp;u.IsImportant);(当然,您可以将投影添加到usuariosRobotViewModel对象)

素胚勾勒不出你

LINQ 的问题在于,开发人员仍在以 SQL 方式思考并尝试将其转换为 LINQ,这有时不起作用,有时也不是最优的。在您的情况下,当您包含对象时,您正在使用导航属性,并且 LINQ 已经知道和对象Proyectos之间的关系,因此您不需要分组或执行任何其他操作:UserProyectosvar usuariosRobotVmInDb = await _dbContext.Users.Include(p => p.Proyectos)&nbsp; &nbsp; &nbsp; &nbsp; .Where(u => u.IsImportant) //Same as u.IsImportant == true&nbsp; &nbsp; &nbsp; &nbsp; .Select(x => new usuariosRobotViewModel {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Id = x.Key,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Nombre = x.Nombre,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; &nbsp; &nbsp; }).ToListAsync();
随时随地看视频慕课网APP
我要回答