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(); 
        } 

ワークフローとワークフローインスタンスが2つあります。linqでsqlに等しくない演算子を書く方法は?

インスタンスを格納するためのオブジェクトとworkflowインスタンスを格納するワークフロー。

ワークフロー表:ID、名前、FirstStateIDは、

WorkflowInstances表をLastStateID:ID、名前、WorkflowIDは、ないCurrentStateID WorkflowInstancesからインスタンスを選択するために、LINQ to SQLのでクエリを作成する方法を

をCurrentStateID同じLastStateID

+3

そして、何あなたのクエリで動作していないのですか? – wudzik

+1

linqにnot-equal演算子を書いたようです。あなたは正確に何を持っているのですか? – Chris

+0

linqの2つのテーブルをsqlに結合するのは混乱していました。/ –

答えて

5

あなたは、あなたが以下のようにwhere句にあなたの条件を追加、2つのテーブル間の関連列であることを参加修正する必要があります。

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

あなたはjoinを排除することができ、それはのようなものでなければなりません:あなたは、ラムダ式を使用している場合

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

、そしてnot(!)はそこに行く:

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

これは、他のすべてのソリューションが複雑なクエリでは機能しないため正解になります。私が最初にこの答えを読んだとき、@erkanerが何を言っているのか分かりませんでしたが、それは簡単です: 'aからbへのcのdへのeへのeへのfへの接続(....) ' – ViRuSTriNiTy

+1

@ViRuSTriNiTyありがとう:) – renakre

関連する問題