我有這些課程: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 對他們創(chuàng)建的所有項目進行分組,并且在哪里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 的問題在于,開發(fā)人員仍在以 SQL 方式思考并嘗試將其轉換為 LINQ,這有時不起作用,有時也不是最優(yōu)的。在您的情況下,當您包含對象時,您正在使用導航屬性,并且 LINQ 已經知道和對象Proyectos之間的關系,因此您不需要分組或執(zhí)行任何其他操作: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 關注
- 120 瀏覽
添加回答
舉報
0/150
提交
取消