Je dois lister toutes les données " shift " à attribuer à un " employé "mais les données d'équipe ne doivent pas être incluses si elles existent déjà dans les données de l'employé. Voyons l'exemple d'image.
Cette requête résout le problème. J'ai trouvé ça ici:
Scott's Blog
select * from shift where not exists
(select 1 from employeeshift where shift.shiftid = employeeshift.shiftid
and employeeshift.empid = 57);
Voyons le résultat:
Maintenant ma question est, comment pourrais-je faire ceci dans linQ? J'utilise un cadre d'entité.
J'espère que quelqu'un pourra vous aider. Merci beaucoup!!!
from s in context.shift
where !context.employeeshift.Any(es=>(es.shiftid==s.shiftid)&&(es.empid==57))
select s;
J'espère que cela t'aides
Le résultat SQL sera différent mais le résultat devrait être le même:
var shifts = Shifts.Where(s => !EmployeeShifts.Where(es => es.ShiftID == s.ShiftID).Any());
Tout d'abord, je suggère de modifier un peu votre requête SQL:
select * from shift
where shift.shiftid not in (select employeeshift.shiftid from employeeshift
where employeeshift.empid = 57);
Cette requête fournit les mêmes fonctionnalités. Si vous voulez obtenir le même résultat avec LINQ, vous pouvez essayer ce code:
//Variable dc has DataContext type here
//Here we get list of ShiftIDs from employeeshift table
List<int> empShiftIds = dc.employeeshift.Where(p => p.EmpID = 57).Select(s => s.ShiftID).ToList();
//Here we get the list of our shifts
List<shift> shifts = dc.shift.Where(p => !empShiftIds.Contains(p.ShiftId)).ToList();