2013-01-03 108 views
0

我想寫一個linq SQL SQL lambda查詢相當於下面的SQL查詢。Linq SQl與多個聯接

Select t.Task_Id 
FROM taskSet ts 
JOIN taskSet tsg ON tsGroup.SetId = ts.SetId 
JOIN tasks t ON t.task_id = tsg.TaskId AND t.task_type_id = 10 AND t.row_status = 1 AND t.status = 0 
WHERE ts.TaskId = @TaskId 

我已到達下面。現在,如果我嘗試再添加一個連接並執行& &條件的檢查,它會給我提供錯誤。請幫我解決這個問題。

m_context.TaskSet 
    .Join(m_context.TaskSet, 
    ts => ts.SetId, 
    tsg => tsg.SetId, 
    (ts, tsg) => new {ts, tsg}) 
+0

你得到的錯誤是什麼? – ronen

+0

我得到了 - 不能將運算符&&應用於'int'和'int'類型的操作數 – San

+0

您能發佈導致問題的完整代碼嗎? – ronen

回答

0

當equijoining(見C# reference on Join)多個集合,我或許會考慮使用的查詢語法,而不是方法鏈,爲清楚起見。您在ON子句中設置的條件必須以.Where()條件(並且它們將在轉換時移至WHERE子句)進行。例如:

from ts in m_context.TaskSets 
join tsg in m_context.TaskSets on ts.SetId equals tsg.SetId 
join t in m_context.Tasks on tsg.TaskId equals t.task_id 
where (t.task_type_id == 10) 
    && (t.row_status == 1) 
    && (t.status == 0) 
    && (ts.TaskId == taskId) 
select new {ts, tsg};