我有这些课程: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 子句......我该如何解决这个问题?谢谢
2 回答
墨色风雨
TA贡献1853条经验 获得超6个赞
当您使用导航属性并且项目已经是您的User
类的属性时,您不需要按任何内容进行分组。只需检索Important
正确的用户:
var result = await _dbContext.Users.Include(p => p.Proyectos) .Where(u => u.IsImportant);
(当然,您可以将投影添加到usuariosRobotViewModel
对象)
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
LINQ 的问题在于,开发人员仍在以 SQL 方式思考并尝试将其转换为 LINQ,这有时不起作用,有时也不是最优的。在您的情况下,当您包含对象时,您正在使用导航属性,并且 LINQ 已经知道和对象Proyectos之间的关系,因此您不需要分组或执行任何其他操作:UserProyectos
var usuariosRobotVmInDb = await _dbContext.Users.Include(p => p.Proyectos)
.Where(u => u.IsImportant) //Same as u.IsImportant == true
.Select(x => new usuariosRobotViewModel {
Id = x.Key,
Nombre = x.Nombre,
...
}).ToListAsync();
- 2 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消