c# - 左/右加入 oneToMany 关系 EF 核心
问题描述
我有以下情况:我有一个UsuarioExterno
包含导航属性的类List<InscripcionRegistroCurso> Inscripciones
每个InscripcionRegistroCurso
类都包含对UsuarioExterno
public class UsuarioExterno : Persona
{
public int UsuarioExternoId { get; set; }
[DisplayName("Localidad")]
public Localidad Localidad { get; set; }
[DisplayName("Organismo")]
public string Organismo { get; set; }
[DisplayName("Sector")]
public List<InscripcionRegistroCurso> Inscripciones { get; set; }
public bool SectorPrivado { get; set; }
[DisplayName("Ocupación")]
public string Ocupacion { get; set; }
public UsuarioExterno() : base()
{
}
}
public class InscripcionRegistroCurso
{
public int InscripcionRegistroCursoId { get; set; }
public Calificacion Calificacion { get; set; }
public List<Asistencia> Asistencias { get; set; }
public UsuarioExterno UsuarioExterno { get; set; }
public Curso Curso { get; set; }
}
public class Curso
{
public int CursoId { get; set; }
public string Nombre { get; set; }
public string Descripcion { get; set; }
}
这是我的 linq 查询
public async Task<List<UsuarioAgenteInscripto>> GetAllUsuariosExternosWithInscripcionToCourseId(int? CourseId)
{
var query = from u in _context.UsuariosExternos
join i in _context.InscripcionesRegistrosCursos
on u.UsuarioExternoId equals i.UsuarioExterno.UsuarioExternoId
into inscripcionRegistro
from inscripcion in inscripcionRegistro.DefaultIfEmpty()
select new UsuarioAgenteInscripto
{
Nombre = u.Nombre,
Apellido = u.Apellido,
Dni = u.DNI,
UsuarioExternoId = u.UsuarioExternoId,
InscriptoCurso = (inscripcion.Curso != null && inscripcion.Curso.CursoId == CourseId),
CursoId =
(inscripcion.Curso != null && inscripcion.Curso.CursoId == CourseId)
? inscripcion.Curso.CursoId
: -1
};
return await query.Where(ins => ins.CursoId == -1 || ins.CursoId == CourseId).ToListAsync();
}
此行正在检查用户是否注册了课程。如果该用户有一行InscripcionRegistroCurso
,则表示该用户已注册该课程。
InscriptoCurso = (inscripcion.Curso != null && inscripcion.Curso.CursoId == CourseId)
然后CursoId
是设置课程的ID,如果它与剃刀页面查询参数中的课程ID相同,则设置它,否则设置-1。
UsuarioAgenteInscripto
是一个类,用于收集有关用户 + 特定课程注册的信息。
我在这里想要完成的事情
我有一个用于显示课程(光标)的剃须刀页面,每一行都包含一个按钮(称为注册用户),该按钮触发另一个剃须刀页面并呈现 UsuariosExternos DbSet 中的所有用户。(见附图)我可以通过勾选复选框为用户注册课程。
问题是我需要在一个表中列出所有用户,但我需要确保是否有用户已经注册了课程,应该标记一个复选框来指示这种情况。
https://localhost/Inscripciones/Inscripcion?id=1
Id 是课程 ID。
我正在做一个正确的加入,以确保列出所有用户,问题是我得到了重复的用户,因为一个用户可以注册几门课程。我需要过滤这种情况并仅显示注册课程的用户,其 courseId 等于当前课程(页面中的课程,查询参数中的课程 ID。)或注册不同课程的用户(但只有一次,不是每次用户注册)如果用户不包含注册,我将 -1 设置为CursoId
每个用户只能注册一次特定的课程。我的意思是用户不能在同一课程中注册两次。
例如,假设我有用户John、Marty 和 Biff,我们在课程 xxxx 的注册页面,课程 ID = 2。
- John 已注册当前课程,没有其他注册
- Marty 没有任何注册。
- Biff 已注册 2 门其他课程
所以我的用户列表应该包含以下内容
名称/名词 | CourseId / CursoId | isEnrolled / InscriptoCurso |
---|---|---|
约翰 | 2 | 真的 |
马蒂 | -1 | 错误的 |
比夫 | -1 | 错误的 |
但相反有以下
名称/名词 | CourseId / CursoId | isEnrolled / InscriptoCurso |
---|---|---|
约翰 | 2 | 真的 |
马蒂 | -1 | 错误的 |
比夫 | -1 | 错误的 |
比夫 | -1 | 错误的 |
我尽力解释情况,如果我需要更多解释,请告诉我。
解决方案
推荐阅读
- javascript - 如何在javascript中分离css代码块?
- java - 在 putExtra 中发送按钮 - Android
- kubernetes - ISTIO - 出口网关返回 - 命令以退出代码 35 终止?
- html - MD Bootstrap 轮播照片列表,将所有照片的高度“锁定”到第一张
- amazon-web-services - 无论自定义异常如何,连接到 appsync 的 Lambda 始终返回 Lambda:Unhandled errorType
- jquery - 从 ajax 调用生成的引导模式主体中的触发按钮
- c# - 为什么带有 CefSharp WPF 可插拔模块的应用程序会意外停止?
- c# - 如何检索
进行 lgrouping 后从列表中 - python - 重新调整训练集
- r - 如何用 ggplot2 (R) 绘制单个置信区间?