对不起,我的英语,我会尽量简洁明了。

我必须对表“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/

10-13 02:23