如何使用LINQ选择哪些不存在?

fib*_*ics 49 c# sql linq entity-framework

我必须列出要分配给" 员工 "的所有" 班次 "数据,但如果员工数据中已存在班次数据,则不得包括班次数据.我们来看看图片样本.

还没有过滤

此查询解决了该问题.我在这里找到了这个:
Scott的博客

select * from shift where not exists 
(select 1 from employeeshift where shift.shiftid = employeeshift.shiftid
and employeeshift.empid = 57);  
Run Code Online (Sandbox Code Playgroud)

让我们看看结果:

过滤

现在我的问题是,我怎么能在linQ中做到这一点?我正在使用实体框架.
希望有人能提供帮助.非常感谢!!!

Ars*_*yan 88

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

希望这可以帮助


hyp*_*hyp 24

结果sql会有所不同,但结果应该是相同的:

var shifts = Shifts.Where(s => !EmployeeShifts.Where(es => es.ShiftID == s.ShiftID).Any());
Run Code Online (Sandbox Code Playgroud)

  • 你应该总是使用`Any()`而不是`Count()`来确定是否有_are_结果...... (5认同)
  • 你应该使用!.Any()而不是计数.如果没有,那么性能将是相同的,但是在所有情况下,由于在找到第一个元素后停止迭代,所以任何一个元素都会更快. (5认同)