Gui*_*lle 6 c# linq entity-framework not-exists navigation-properties
对不起我的英语,我会尽量简洁明了.
我必须表"ALUMNOS"和"MATERIAS".在SQL中存在另一个表"ALUMNOS BY MATERIAS".我知道这在EF中不是必需的,因为存在属性导航,但是我需要获得未在任何MATERIAS中注册的ALUMNOS.
我想要这样的东西:
SELECT *
FROM ALUMNOS AS A
WHERE NOT EXISTS(
SELECT MA.MATERIAID
FROM MATERIASXALUMNO AS MA
WHERE A.LEGAJO = MA.LEGAJO
AND .MATERIAID = XXX)
Run Code Online (Sandbox Code Playgroud)
但是我的困惑开始了,因为在ALUMNOS实体中我有Mater的Collection,反之亦然,但我没有在Alumnos MateriaID或Materias AlumnosID中,所以我怎么能用linq做到这一点?
总而言之,我需要的是获得未参加XX Materia的Alumnos以及他们在该Materia注册的Alumnos ......
在此先感谢,我希望可以帮助我,我使用存储过程修复它,但我想要它与Linq或至少了解它是如何做的...
来自阿根廷的问候!吉尔
我想你想要的东西
var missing = dbcontext.Alumnos.Where(a => !a.Materias.Any(m => m.MateriaID == XXX));
Run Code Online (Sandbox Code Playgroud)
它可以访问Alumnos中的Materias集合,而无需担心连接表.(这假设导航属性已正确映射.)
使用.Any()forExists并且您可以通过使用反转它!Any()
//assuming that ALUMNOS and MATERIASXALUMNO have FK A.LEGAJO = MA.LEGAJO
from a in context.Alumnos
where !a.MATERIASXALUMNO.Where(ma=>ma.MATERIAID == XXX).Any()
select a
Run Code Online (Sandbox Code Playgroud)
或者如果没有那么
from a in context.Alumnos
where !context.MATERIASXALUMNO.Where(ma=>ma.MATERIAID == XXX && a.LEGAJO == ma.LEGAJO)
.Any()
select a
Run Code Online (Sandbox Code Playgroud)
我正在使用Where(predicate)并且Any()只是为了保持清楚,但是您可以合并并使用Any(predicate of where)也如另一篇文章中所示
| 归档时间: |
|
| 查看次数: |
20235 次 |
| 最近记录: |