2013-08-16 11 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(); 
        } 

Ho due tabelle: flussi di lavoro e istanze di flusso di lavoro.Come scrivere operatore non uguale in linq a sql?

Flussi di lavoro per memorizzare oggetti e flusso di lavoro. Istanze per archiviare istanze.

flussi di lavoro Tabella: ID, nome, FirstStateID, LastStateID

WorkflowInstances Tabella: ID, nome, WorkflowID, CurrentStateID

Come scrivere una query in LINQ to SQL per selezionare i casi da WorkflowInstances che non CurrentStateID pari LastStateID

+3

E ciò che non funziona nella query? – wudzik

+1

Sembra che tu abbia scritto un operatore non uguale in linq. Qual è il problema che stai avendo esattamente? – Chris

+0

Sono stato confuso tra l'unire due tabelle in linq a sql perché sono nuovo con esso:/ –

risposta

5

È necessario rivedere il join di essere sulle colonne correlate tra le 2 tavoli, quindi si aggiunge la sua condizione nella clausola in cui, come il seguente:

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

è possibile eliminare join e dovrebbe essere qualcosa del tipo:

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

Se si utilizza espressioni lambda, quindi not(!) ci va:

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

Questa dovrebbe essere la risposta corretta in quanto tutte le altre soluzioni qui non funzionano con query complesse. Quando ho letto per la prima volta questa risposta, non sapevo cosa stava cercando di dire @erkaner, ma è così semplice: 'da a in b join c in d in e da f in e.Where (....)' – ViRuSTriNiTy

+1

@ViRuSTriNiTy grazie :) – renakre