2013-08-16 32 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個表格:Workflows和WorkflowInstances。如何在LINQ中編寫不等於運算符的sql?

用於存儲對象和工作流程實例的工作流程。

工作流程表:ID,姓名,FirstStateID,LastStateID

WorkflowInstances表:ID,姓名,WorkflowID,CurrentStateID

如何在LINQ編寫一個查詢到SQL來選擇從哪個CurrentStateID不WorkflowInstances實例等於LastStateID

+3

,哪些項目沒有在您的查詢工作? – wudzik

+1

你似乎在linq中寫了一個不相等的運算符。你到底有什麼問題? – Chris

+0

我在將linq連接到sql中的兩個表之間感到困惑,因爲我對它感興趣:/ –

回答

5

您需要修改加入要上2和表之間的相關列,然後添加你的病情在where子句中,如下所示:

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,它應該是這樣的:如果你正在使用lambda表達式

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在e中在e中從f加入e .Where(....)' – ViRuSTriNiTy

+1

@ViRuSTriNiTy謝謝:) – renakre