2014-10-01 213 views
-3

我想將以下mysql查詢轉換爲LINQ。不過,我沒有過去在LINQ中使用連接的經驗。我可以獲得一些關於如何處理這個問題的提示。將SQL查詢轉換爲LINQ

SELECT db.jm_job.jobID 
    , sum(MaterialPrice+LaborPrice+ExpensePrice) * db.jm_workorderdetail.quantity 
FROM db.jm_workorderdetail 
    left join db.jm_workorder 
     on db.jm_workorderdetail.WorkOrderID=db.jm_workorder.WorkOrderID 
    left join db.jm_job 
     on db.jm_job.JobID=db.jm_workorder.JobID 
group by db.jm_job.jobID 
+0

不適SQL找到一些好的資源開始與 – 2014-10-01 20:41:51

+0

@RobertMcKee我認爲它valid.unless我錯過了什麼 – Steve 2014-10-01 20:43:24

+0

你的選擇列表中包括'* db.jm_workorderdetail.quantity' – 2014-10-01 20:44:32

回答

0
SELECT db.jm_job.jobID, 
     sum(MaterialPrice + LaborPrice + ExpensePrice) * db.jm_workorderdetail.quantity 

    FROM db.jm_workorderdetail 

    LEFT JOIN db.jm_workorder 
    ON db.jm_workorderdetail.WorkOrderID = db.jm_workorder.WorkOrderID 

    LEFT JOIN db.jm_job on db.jm_job.JobID=db.jm_workorder.JobID 
    GROUP BY db.jm_job.jobID 

認爲它是這樣的:

from detail in db.jm_workorderdetail 

join wo in db.jm_workorder 
    on db.jm_workorderdetail.WorkOrderID equals db.jm_workorder.WorkOrderID 

join job in db.jm_job 
    on db.jm_job.JobID equals db.jm_workorder.JobID 

group jm_job by job.jobId into grp 

select new 
{ 
    jobId = grp.key, 
    something = (MaterialPrice + LaborPrice + ExpensePrice) * wo.jm_workorderdetail.quantity 
} 

```

+0

這提供了一個INNER JOIN,而不是提問者請求的左連接。 – guildsbounty 2014-10-01 21:03:05

+0

我想你是正確的,但看着輸出,這可能是他真正想要的。我懷疑你真的想要一個null jobid與所有未分配的工作訂單總數。 – 2014-10-01 21:27:57

1

內部聯接在LINQ是很簡單,但左連接是有點棘手,涉及臨時LINQ變量。

很明顯,你有MSDN文檔在這裏:http://msdn.microsoft.com/en-us/library/bb397895.aspx

另一個SO張貼關於同一主題:LEFT OUTER JOIN in LINQ

和一堆如何JOINS在LINQ工作的例子:http://msdn.microsoft.com/en-us/vstudio/ee908647.aspx#leftouterjoin

我我們將留下SELECT和WHERE塊以供您弄清楚,但這裏大概是您的連接應該如何看起來如何:

var results = from wod in db.jm_workorderdetail 
from wo in db.jm_workorder.Where(w => w.WorkOrderID == wod.WorkOrderID).DefaultIfEmpty() 
from job in db.jm_job.Where(j => j.JobID == wo.JobID).DefaultIfEmpty() 
select new {SELECT LOGIC GOES HERE} 

這裏最重要的部分是.DefaultIfEmpty()子句,因爲如果WHERE不起作用,就會創建返回null的'left join'行爲

這也會遺漏group by子句,可以通過谷歌搜索只是「LINQ集團通過」