「shift」データをすべてリストして、「employee」が、従業員のデータに既に存在する場合、シフトデータを含めないでください。画像サンプルを見てみましょう。
このクエリは問題を解決します。私はこれをここで見つけました:
スコットのブログ
select * from shift where not exists
(select 1 from employeeshift where shift.shiftid = employeeshift.shiftid
and employeeshift.empid = 57);
結果を見てみましょう:
さて、私の質問は、linQでこれをどのように作成できますか?エンティティフレームワークを使用しています。
誰かが助けてくれることを願っています。どうもありがとう!!!
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());
まず、SQLクエリを少し変更することをお勧めします。
select * from shift
where shift.shiftid not in (select employeeshift.shiftid from employeeshift
where employeeshift.empid = 57);
このクエリは同じ機能を提供します。 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();