如何將嵌套SELECT語句的SQL查詢轉換爲LINQ語句?將SQL查詢轉換爲LINQ到SQL
我有下面的SQL語句輸出我需要的結果,但我不知道如何在LINQ中複製它。
SELECT X.ITMGEDSC, (SUM(X.[ENDQTY_I]) - SUM(X.[ORDERLINES])) AS AVAIL
FROM SELECT T1.[MANUFACTUREORDER_I],T2.[ITMGEDSC],T1.[ENDQTY_I],
(SELECT (COUNT(VW.[MANUFACTUREORDER_I]) - 1)
FROM [PLCD].dbo.[vw_WIP_Srl] VW
WHERE VW.[MANUFACTUREORDER_I] = T1.[MANUFACTUREORDER_I]
GROUP BY VW.[MANUFACTUREORDER_I]) AS ORDERLINES
FROM [PLCD].dbo.[vw_WIP_Srl] T1
INNER JOIN [PLCD].dbo.IV00101 T2 ON T2.ITEMNMBR = T1.ITEMNMBR
GROUP BY T1 [MANUFACTUREORDER_I],T2.[ITMGEDSC],T1.[ENDQTY_I]) AS X
GROUP BY X.ITMGEDSC
ITEMNMBR是包含修訂號的項目的ID,例如A1008001。最後3個數字表示修訂。所以A1008002是相同的項目,只是不同的修訂。在我的查詢中,我需要將這些視爲同一個項目,並只輸出父項目編號(A1008)的數量。此父項編號是IV00101.ITMGEDSC列。
上面的代碼將採用以下數據
MANUFACTUREORDER_I ITEMNMBR ENDQTY_I
MAN00003140 A1048008 15
MAN00003507 A1048008 1
MAN00004880 A10048001 15
MAN00004880 A10048001 15
MAN00004880 A10048001 15
和輸出的結果如下
ITEMNMBR QTY
A1048008 16
A10048001 13*
- 的原因,此值是13和NOT 45是因爲它們的所有部分相同的MANUFACTUREORDER_I。因此,在這個系統中,這意味着庫存有15個,但其中兩個已經被交易掉了。因此,3行,一個爲貨物進貨,另外兩個爲兩個項目缺貨(忽略這些行中的數量)
正如我在開始時提到的,上面的SQL給了我輸出我後,但我不確定如何在Linq複製這個。
更新 - 傑夫的原始解決方案
var query = from item in db.vw_WIP_Srls
group new { item.MANUFACTUREORDER_I, item.ENDQTY_I } by item.ITEMNMBR into items
select new
{
ItemNumber = items.Key,
QtyAvailable = (from item in items
//assumes quantities equal per order number
group 1 by item into orders
select orders.Key.ENDQTY_I - (orders.Count() - 1))
.Sum()
};
LINQ to SQL使用對象而不是數據庫表。所以一旦你有你的實體設置,你可以開始玩他們。 – 2010-10-09 15:51:01
我在VS2010中創建了Linq to Sql類,並添加了一個到數據庫的連接,然後添加了所需的數據庫對象。 – sparkymark75 2010-10-09 16:56:06
簡化您的問題,編寫Linq代碼來選擇COUNT很容易解釋。編寫代碼來模仿你的業務邏輯是... *你的*工作。 – 2010-10-09 17:52:14