对不起,我的英语,我会尽量简洁明了。
我必须对表“ALUMNOS”和“MATERIAS”进行处理。在SQL中,存在另一个表“ALUMNOS BY MATERIAS”。我知道这在EF中不是必需的,因为存在属性导航,但是我需要获取未在任何 Material 中注册的铝矾土。
我想要这样的东西:
SELECT *
FROM ALUMNOS AS A
WHERE NOT EXISTS(
SELECT MA.MATERIAID
FROM MATERIASXALUMNO AS MA
WHERE A.LEGAJO = MA.LEGAJO
AND .MATERIAID = XXX)
但是我的困惑开始了,因为在ALUMNOS实体中我拥有Materias的集合,反之亦然,但是在Alumnos MateriaID或Materias AlumnosID中却没有,所以如何使用linq做到这一点?
总而言之,我需要的是获得未加入XX Materia的校友以及他们已加入XX Materia的校友...
在此先感谢您,我希望可以对我有所帮助,我可以使用存储过程对其进行修复,但是我希望与Linq一起使用,或者至少要了解它的工作方式...
问候来自阿根廷!
吉耶
最佳答案
如果您的导航属性映射为 Alumno.Materias 为您提供 Alumno 注册的 Materias 集合,您将需要如下内容:
var missing = dbcontext.Alumnos.Where(a => !a.Materias.Any(m => m.MateriaID == XXX));
只要 ALUMNOS 和 MATERIAS 之间的关系按照描述进行映射,这就会起作用。它允许我们将它们视为对象而不是表。在幕后,它生成使用 EXISTS 或 NOT EXISTS 的 SQL,并且还会自动使用 MATERIASXALUMNO 和 LEGAJO。但是映射让 Entity Framework 将其抽象化。
关于c# - 不存在使用Linq,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24140922/