如何将嵌套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