2013-08-16 10 views
6
using (RapidWorkflowDataContext context = new RapidWorkflowDataContext()) 
        { 
         var query = from w in context.WorkflowInstances 
         from c in context.Workflows 
         where EmpWorkflowIDs.Contains((int)w.ID) && w.CurrentStateID != c.LastStateID 
         select w; 

         return query.ToList(); 
        } 

Mam 2 tabele: Przepływy pracy i przepływy pracy.Jak napisać nie równego operatorowi w linq do sql?

Przepływy pracy do przechowywania obiektów i przepływów pracy do instancji magazynu.

Workflows Tabela: ID, Nazwa, FirstStateID, LastStateID

WorkflowInstances Tabela: ID, Nazwa, WorkflowID, CurrentStateID

Jak napisać kwerendę w LINQ do SQL, aby wybrać instancje z WorkflowInstances które nie CurrentStateID równy LastStateID

+3

a co nie działa w zapytaniu? – wudzik

+1

Wydaje się, że napisałeś nierównoprawnego operatora w linq. W czym dokładnie masz problem? – Chris

+0

Byłem zdezorientowany łącząc dwie tabele w linq do sql, ponieważ jestem nowy:/ –

Odpowiedz

5

trzeba zrewidować przyłączyć się na kolumnach powiązanych między 2 tabel, a następnie dodać warunek w klauzuli WHERE, jak następuje:

using (RapidWorkflowDataContext context = new RapidWorkflowDataContext()) 
         { 
          var query = from w in context.WorkflowInstances 
             join c in context.Workflows on w.WorkflowID equals c.ID 
             where EmpWorkflowIDs.Contains((int)w.ID) 
             && w.CurrentStateID != c.LastStateID 
             select w; 

          return query.ToList(); 
         } 
0

można wyeliminować join i powinno to być coś takiego:

var query = from w in context.WorkflowInstances 
      where !context.Workflows.Any(c => w.CurrentStateID != c.LastStateID) && EmpWorkflowIDs.Contains((int)w.ID) 
      select w; 
3

Jeśli używasz wyrażeń lambda, następnie not(!) idzie:

.Where(p => !p.Whatever...) 
+1

To powinna być poprawna odpowiedź, ponieważ wszystkie inne rozwiązania tutaj nie będą działać ze złożonymi zapytaniami. Kiedy po raz pierwszy przeczytałem tę odpowiedź, nie wiedziałem, co @erkaner próbował powiedzieć, ale jest to takie proste: 'od a w b łączyć c w d na e od f w e.Where (....)' – ViRuSTriNiTy

+1

@ViRuSTriNiTy dzięki :) – renakre