2017-06-14 9 views
-1

私は古いwebformsアプリケーションをasp.net mvcに変換しています。私のSQL文の1つをlinqに変換する際に問題があります。特に、私はグループ化と結合の助けが必要です。私はここで様々な例を見ていくつかの方法を試してきましたが、誰も私のために働いていませんでした。sqlをlinqに変換する(結合してグループ化する)

SELECT cp.PartNumber, cp.PartDescription, PFEP.PFEPTx, PFEP.KBQty, 
TX_QOH.QOH, TX_ReworkQOH.Rework_QOH as Rework, SUM(ShippingInput.Qty) AS 
'Ocean' 
FROM CustomerParts as cp 

LEFT JOIN TX_QOH 
ON cp.PartNumber = TX_QOH.PN 

LEFT JOIN TX_ReworkQOH 
ON cp.PartNumber = TX_ReworkQOH.PN 

LEFT JOIN ShippingInput 
ON cp.PartNumber = ShippingInput.PN AND ShippingInput.Status <> 'Received' 

LEFT JOIN PFEP 
ON cp.PartNumber= PFEP.PN 

WHERE cp.PartType = 'Actuator Part' AND cp.Division = 'Bayne' AND cp.Active 
= 'Yes' AND TX_QOH.QOH = '0' 

Group By cp.PartNumber, TX_QOH.QOH, TX_ReworkQOH.Rework_QOH, 
cp.PartDescription, PFEP.PFEPTx, PFEP.KBQty 
Order By cp.PartNumber ASC 
+0

のコードは、おそらく? –

+0

翻訳をしようとする人は、翻訳を書くよりも翻訳を修正するのに役立つでしょう – jhhoff02

+0

*しないでください。それは深刻なバグです。 LINQ to SQLまたはLINQ to Entitiesは、ORMの照会言語であり、SQLの置換ではありません.ORMを使用しないでLINQを使用することはできません。リレーションとナビゲーションのプロパティを持つ適切なエンティティを作成し、ORMに関連する行を一致させてオブジェクトにコンバートさせます。 –

答えて

0

LINQバージョン

var queryNew = (from cp in db.MasterPartLists 
      join tx in db.TxQohs on cp.CustomerPn equals tx.Pn into jTxQoh 
      from tx in jTxQoh.DefaultIfEmpty() 
      join c in db.ShipIns.Where(r => r.ShipInStatusId != 3) on cp.CustomerPn equals c.Pn into jShipIns 
      from c in jShipIns.DefaultIfEmpty() 
      join d in db.Pfeps on cp.CustomerPn equals d.CustomerPn into jPfeps 
      from d in jPfeps.DefaultIfEmpty() 
      where d.PartTypeId == parttype && cp.CustomerDivisionId == division && cp.ActivePartId == 1 && tx.Qoh == 0 
      group new {cp, d, tx, c} by new {cp.CustomerPn, tx.Qoh, cp.PartDescription, d.PfepTx, d.KbQty} 
      into gcp 
      orderby gcp.Key.CustomerPn 
      select new 
      { 
       gcp.Key.CustomerPn, 
       gcp.Key.PartDescription, 
       gcp.Key.PfepTx, 
       gcp.Key.KbQty, 
       gcp.Key.Qoh, 
       Ocean = (int?)gcp.Sum(r => r.c.Qty) 
      }); 

SQLバージョン

上のラムダ Whereへのテスト10
var queryNew = "SELECT cp.CustomerPn, cp.PartDescription, Pfeps.PFEPTx, Pfeps.KBQty, TxQohs.Qoh, SUM(ShipIns.Qty) AS 'Ocean' " 
          + "FROM MasterPartLists as cp " 
          + "LEFT JOIN TxQohs " 
          + "ON cp.CustomerPn = TxQohs.Pn AND TxQohs.Qoh = '0' " 
          + "LEFT JOIN ShipIns " 
          + "ON cp.CustomerPn = ShipIns.Pn AND ShipIns.ShipStatusId <> '3' " 
          + "LEFT JOIN Pfep " 
          + "ON cp.CustomerPn = Pfeps.CustomerPn " 
          + "WHERE cp.PartTypeId = parttype AND cp.CustomerDivisionId = division AND cp.ActivePartId = '1' " 
          + "Group By cp.CustomerPn, TxQohs.Qoh, cp.PartDescription, Pfeps.PfepTx, Pfeps.KbQty " 
          + "Order By cp.CustomerPn ASC "; 
0

これは明らかにテストされていない、と彼らは、左サイドには存在しないかもしれないとき(例えばSUM(ShippingInput.Qty))結合フィールドにアクセスしようとするとnullに問題がある可能性があり、私はいくつかの移動理由でありますjoin

from cp in CustomerParts 
join r_tx_qoh in TX_QOH.Where(r => r.QOH == "0") on cp.PartNumber equals r_tx_qoh.PN into j_tx_qoh 
from r_tx_qoh in j_tx_qoh.DefaultIfEmpty() 
join r_tx_reworkqoh in TX_ReworkQOH on cp.PartNumber equals r_tx_reworkqoh.PN into j_tx_reworkqoh 
from r_tx_reworkqoh in j_tx_reworkqoh.DefaultIfEmpty() 
join r_shippinginput in ShippingInput.Where(r => r.Status != "Received") on cp.PartNumber equals r_shippinginput.PN into j_shippinginput 
from r_shippinginput in j_shippinginput.DefaultIfEmpty() 
join r_pfep in PFEP on cp.PartNumber equals r_pfep.PN into j_pfep 
from r_pfep in j_pfep.DefaultIfEmpty() 
where cp.PartType == "Actuator Part" && cp.Division == "Bayne" && cp.Active == "Yes" 
group new { cp, r_pfep, r_tx_qoh, r_tx_reworkqoh, r_shippinginput } by new { cp.PartNumber, r_tx_qoh.QOH, r_tx_reworkqoh.Rework_QOH, cp.PartDescription, r_pfep.PFEPTx, r_pfep.KBQty } into gcp 
orderby gcp.Key.PartNumber 
select new { gcp.Key.PartNumber, gcp.Key.PartDescription, gcp.Key.PFEPTx, gcp.Key.KBQty, tcp.Key.QOH, Rework = gcp.Key.Rework_QOH, Ocean = gcp.Sum(r => r.r_shippinginput.Qty) } 
+0

おかげでNetMage。これは私を非常に近くにした。以下のlinq同等のものを見つけてください。 – Zhongwenslayer

関連する問題