Equivalent NOT IN avec LINQ
Bonjour à tous,
J'ai besoin de réaliser avec LINQ l'équivalent d'une requête SQL avec une clause NOT IN.
Voici la requête SQL en question :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| SELECT
EMP.ID_EMP
FROM
DBO.EMPLOYE EMP
WHERE
EMP.DES_EMP = 'DUPONT'
AND EMP.PRENOM_EMP = 'ROBERT'
AND EMP.ID_EMP NOT IN (
SELECT
ES.IDEMP_ES
FROM
DBO.EMPSERV ES
WHERE
ES.IDEMP_ES = EMP.ID_EMP
AND ES.DSORT_ES IS NULL
) |
Cette requête SQL fonctionne parfaitement. A titre informatif, il y a donc une table Employe, une table EmpServ et une table Service. La table EmpServ contient l'id de l'employe, l'id du serv, une date d'entrée et une date de sortie (on a donc un histoire des changements de service).
Le but est de faire une recherche afin de savoir si une personne dont on connait le nom et le prenom (sans être sur qu'elle existe déjà dans la table employe) est actuellement dans un service.
J'ai donc essayé de faire l'équivalent en LINQ :
Code:
1 2 3 4 5 6 7 8 9
| MesEntities entities = new MesEntities();
var result = from emp in entities.employe
where !(from es in entities.empserv
where es.DSort_ES == null
select es.employe.ID_Emp)
.Contains(emp.ID_Emp)
&& emp.Des_Emp.Trim().Equals(leNom.Trim())
&& emp.Prenom_Emp.Trim().Equals(lePrenom.Trim())
select emp; |
Mais j'ai une erreur à chaque fois. Et je comprend pas trop pourquoi. Pour faire ma requete, je me suis inspiré de cet exemple : http://programminglinq.com/blogs/mar...nq-to-sql.aspx
J'ai aussi essayé de faire comme ceci mais j'ai aussi une erreur :
Code:
1 2 3 4 5
| var esResult = from es in entities.empserv
where es.DSort_ES == null
select es.employee.ID_Emp;
var empResult = entities.employe.Where(emp => esResult.Contains(emp.ID_Emp)); |
Merci d'avance pour votre aide.