将SQL查询转换为LINQ到SQL
如何将带有嵌套SELECT语句的SQL查询转换为LINQ语句 我有下面的SQL语句,它输出我需要的结果,但我不确定如何在LINQ中复制它将SQL查询转换为LINQ到SQL,sql,linq-to-sql,Sql,Linq To Sql,如何将带有嵌套SELECT语句的SQL查询转换为LINQ语句 我有下面的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)
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而不是45的原因是因为它们都是同一个制造订单_I的一部分。因此,在系统中,这意味着有15个库存,但其中两个已在缺货时进行交易以供使用。因此,有3行,一行用于进货,另两行用于两项缺货(忽略这些行中的数量)
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()
};
给你。不幸的是,我看不到你给我留下的评论,但我相信这应该是同等的。我更改了名称以与您的查询紧密匹配
var query = from a in db.vw_WIP_Srl
join b in db.IV00101 on a.ITEMNMBR equals b.ITEMNMBR
group new { a.MANUFACTUREORDER_I, a.ENDQTY_I } by b.ITMGEDSC into g
select new
{
ITMGEDSC = g.Key,
AVAIL = (from item in g
group 1 by item into orders
select orders.Key.ENDQTY_I - (orders.Count() - 1))
.Sum()
};
给你。不幸的是,我看不到你给我留下的评论,但我相信这应该是同等的。我更改了名称以与您的查询紧密匹配
var query = from a in db.vw_WIP_Srl
join b in db.IV00101 on a.ITEMNMBR equals b.ITEMNMBR
group new { a.MANUFACTUREORDER_I, a.ENDQTY_I } by b.ITMGEDSC into g
select new
{
ITMGEDSC = g.Key,
AVAIL = (from item in g
group 1 by item into orders
select orders.Key.ENDQTY_I - (orders.Count() - 1))
.Sum()
};
LINQtoSQL使用对象,而不是数据库表。因此,一旦您设置了实体,您就可以开始使用它们了。我在VS2010中通过创建Linq到Sql类,添加到数据库的连接,然后添加所需的数据库对象来设置它们。简化您的问题,编写Linq代码以选择计数很容易解释。编写代码来模拟您的业务逻辑是。。。你的工作。谢谢你的建议。实际上,我写这些都是为了帮助别人帮助我。我已经编写了SQL来“模拟”业务逻辑,我正在寻找关于如何在Linq中复制此逻辑的建议/指导。我已经完成了基本的Linq查询,但是没有使用多个嵌套的SELECT语句。我认为在这里发帖的目的是获取建议,而不是讲座。你是否删除了你的另一个问题,还是因为停机而丢失了?在你在评论中解释了一些事情之后,我正要尝试更新它。但我再也无法回答这个问题了。我使用的查询逻辑在IMO中要简单得多,一旦我了解了您的模式,就可以很容易地进行调整。LINQ to SQL使用对象,而不是数据库表。因此,一旦您设置了实体,您就可以开始使用它们了。我在VS2010中通过创建Linq到Sql类,添加到数据库的连接,然后添加所需的数据库对象来设置它们。简化您的问题,编写Linq代码以选择计数很容易解释。编写代码来模拟您的业务逻辑是。。。你的工作。谢谢你的建议。实际上,我写这些都是为了帮助别人帮助我。我已经编写了SQL来“模拟”业务逻辑,我正在寻找关于如何在Linq中复制此逻辑的建议/指导。我已经完成了基本的Linq查询,但是没有使用多个嵌套的SELECT语句。我认为在这里发帖的目的是获取建议,而不是讲座。你是否删除了你的另一个问题,还是因为停机而丢失了?在你在评论中解释了一些事情之后,我正要尝试更新它。但我再也无法回答这个问题了。在我看来,我的查询逻辑要简单得多,一旦我了解了您的模式,就可以很容易地进行调整。非常感谢您抽出时间来帮忙。请注意杰夫。非常感谢您抽出时间来帮忙。