How to SELECT WHERE NOT EXIST using LINQ?

前端 未结 5 792
余生分开走
余生分开走 2020-12-13 23:33

I have to list all \"shift\" data to be assigned to an \"employee\" but shift data must not be included if it is already existing in employ

相关标签:
5条回答
  • 2020-12-13 23:38
            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
    
    0 讨论(0)
  • 2020-12-13 23:50

    How about..

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

    Edit: This will give you shifts where there is an associated employeeshift (because of the join). For the "not exists" I'd do what @ArsenMkrt or @hyp suggest

    0 讨论(0)
  • 2020-12-13 23:52

    The outcome sql will be different but the result should be the same:

    var shifts = Shifts.Where(s => !EmployeeShifts.Where(es => es.ShiftID == s.ShiftID).Any());
    
    0 讨论(0)
  • 2020-12-13 23:59

    First of all, I suggest to modify a bit your sql query:

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

    This query provides same functionality. If you want to get the same result with LINQ, you can try this 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();
    
    0 讨论(0)
  • 2020-12-14 00:04
    from s in context.shift
    where !context.employeeshift.Any(es=>(es.shiftid==s.shiftid)&&(es.empid==57))
    select s;
    

    Hope this helps

    0 讨论(0)
提交回复
热议问题