如何select哪里不存在使用LINQ?

我必须列出要分配给“ 员工 ”的所有“ class次 ”数据,但是如果class次数据已经存在于员工数据中,则不得包含class次数据。 让我们看看图片样本。

还没有过滤

这个查询解决了这个问题。 我在这里find了这个:
斯科特的博客

select * from shift where not exists (select 1 from employeeshift where shift.shiftid = employeeshift.shiftid and employeeshift.empid = 57); 

我们来看看结果:

过滤

现在我的问题是,我怎么能在linQ中做到这一点? 我正在使用entity framework。
希望有人可以帮忙。 非常感谢!!!

 from s in context.shift where !context.employeeshift.Any(es=>(es.shiftid==s.shiftid)&&(es.empid==57)) select s; 

希望这可以帮助

结果SQL将是不同的,但结果应该是一样的:

 var shifts = Shifts.Where(s => !EmployeeShifts.Where(es => es.ShiftID == s.ShiftID).Any()); 

首先,我build议修改一下你的sql查询:

  select * from shift where shift.shiftid not in (select employeeshift.shiftid from employeeshift where employeeshift.empid = 57); 

这个查询提供相同的function。 如果你想得到与LINQ相同的结果,你可以试试这个代码:

 //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(); 

怎么样..

 var result = (from s in context.Shift join es in employeeshift on s.shiftid equals es.shiftid where es.empid == 57 select s) 

编辑:这会给你有class次的地方有一个关联employeehift(因为join)。 对于“不存在”我会做@ArsenMkrt或@hypbuild议

  Dim result2 = From s In mySession.Query(Of CSucursal)() Where (From c In mySession.Query(Of CCiudad)() From cs In mySession.Query(Of CCiudadSucursal)() Where cs.id_ciudad Is c Where cs.id_sucursal Is s Where c.id = IdCiudad Where s.accion <> "E" AndAlso s.accion <> Nothing Where cs.accion <> "E" AndAlso cs.accion <> Nothing Select c.descripcion).Single() Is Nothing Where s.accion <> "E" AndAlso s.accion <> Nothing Select s.id, s.Descripcion