2017-06-21 16 views
0

以下は私のSQLクエリLINQに上記のクエリを変換しようと第二のテーブルをマッピングすることはできません左外側は

SELECT (((((('L' + (CONVERT(NVARCHAR(MAX), t0.Length))) + 'W') + (CONVERT(NVARCHAR(MAX), t0.Width))) + 
       'H') + (CONVERT(NVARCHAR(MAX), t0.Height))) + ' - ') + t0.DimUoM AS 'Dimensions' 
     , (((CONVERT(NVARCHAR(MAX), t0.NetWt)) + ' (') + t0.NetWtUoM) + ')' AS 'Weight' 
     , t0.UPCCode 
     , t1.DisplayBrand AS 'Brand' 
     , t2.ID 
FROM SmartSearchNewQA.dbo.MaterialMaster AS t0 
LEFT OUTER JOIN dbo.BrandConversion AS t1 
     ON t0.Brand = t1.SAPBrand 
LEFT OUTER JOIN ClickCommerce.dbo.tblWarrantyPartReturn AS t2 
     ON t0.MaterialNumber = t2.PartNumber 
LEFT OUTER JOIN ClickCommerce.dbo.tblWarrantyPartReturnAddress AS t3 
     ON t2.ReturnCode = t3.ReturnCode 
WHERE t0.MaterialNumber = 'S1-326000' AND 
     t2.DistributorId = '00100'; 

Query Result

AMで参加して、3つのテーブルから3つの列を取得します。これまでに派生したLINQを見つけてください。

from mm in ctx.MaterialMasters 
join bc in ctx.BrandConversions on mm.Brand equals bc.SAPBrand into bc1 
from brandConv in bc1.DefaultIfEmpty() 
join wp1 in ctx.tblWarrantyPartReturns 
    on mm.MaterialNumber equals wp1.PartNumber into bc2 
from partconv in bc2.DefaultIfEmpty() 
join wp2 in ctx.tblWarrantyPartReturnAddresses 
    on bc2 
from partconv2 in bc3.DefaultIfEmpty() 
where mm.MaterialNumber == materialNumber 
select new MaterialHeader 
{ 
    Brand = brandConv.DisplayBrand, 
    Dimensions = "L" + mm.Length + ":W" + mm.Width + ":H" + mm.Height + " - " + mm.DimUoM, 
    UPCCode = mm.UPCCode, 
    Weight = mm.NetWt + " (" + mm.NetWtUoM + ")" 
}) 

上記のSQL結果がLINQクエリに届くように助けてください。

おかげ

+0

質問は大変です。すべてのこれらの[と]プラス絶対に無駄なエイリアスは、このユーザーが最高の敵になります。それから冗長な(そして)狂った量があります。私はあなたをLINQに移そうとしていることを知っていますが、そのエイリアスが悪い理由をもっと知るべきです。 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-table-aliases-like-a-b-c-or-t1-t2-t3.aspx –

答えて

0

これはコメントのために長すぎる、そしてそれはとにかくきちんとフォーマットしないでしょう。意味のあるエイリアスを使って同じクエリがどのように見えるかがここにあります。私はまた、括弧内の括弧と大括弧をすべて削除しました。これは、私がやっていることを見るのがはるかに簡単です。

SELECT 'L' + CONVERT(NVarChar(MAX), mm.Length) + 'W' + CONVERT(NVarChar(MAX), mm.Width) + 'H' + CONVERT(NVarChar(MAX), mm.Height) + ' - ' + mm.DimUoM AS Dimensions 
    , CONVERT(NVarChar(MAX), mm.NetWt) + ' (' + mm.NetWtUoM + ')' AS Weight 
    , mm.UPCCode 
    , bc.DisplayBrand AS Brand 
    , wpr.ID 
FROM SmartSearchNewQA.dbo.MaterialMaster AS mm 
LEFT OUTER JOIN dbo.BrandConversion AS bc ON mm.Brand = bc.SAPBrand 
LEFT OUTER JOIN ClickCommerce.dbo.tblWarrantyPartReturn as wpr on mm.MaterialNumber = wpr.PartNumber 
LEFT OUTER JOIN ClickCommerce.dbo.tblWarrantyPartReturnAddress as wpra on wpr.ReturnCode = wpra.ReturnCode 
WHERE mm.MaterialNumber = 'S1-326000' 
    AND wpr.DistributorId ='00100' 
1

私はこのような何かをしようと:SmartSearchNewQAとClickCommerce:

from t0 in ctx.MaterialMasters 
join t1 in ctx.BrandConversions 
    on t0.Brand equals t1.SAPBrand into firstLeftJoin 
from m in firstLeftJoin.DefaultIfEmpty() 
join t2 in ctx2.tblWarrantyPartReturns 
    on t2.PartNumber equals m.MaterialNumber into secondLeftJoin 
from n in secondLeftJoin.DefaultIfEmpty() 
join t3 in ctx2.tblWarrantyPartReturnAddress 
    on t3.ReturnCode equals n.ReturnCode into thirdLeftJoin 
from s in thirdLeftJoin.DefaultIfEmpty() 
where t0.MaterialNumber = "S1-326000" && 
    t2.DistributorId = "00100" 
select new MaterialHeader { 
          Brand = t1.DisplayBrand, 
          Dimensions = "L" + t0.Length + ":W" + t0.Width + ":H" + t0.Height + " - " + t0.DimUoM, 
          UPCCode = t0.UPCCode, 
          Weight = t0.NetWt + " (" + t0.NetWtUoM + ")" 
          } 

は、それはあなたが2つのデータベースを持っている私の注意を捕獲しました。 SQLクエリでは、2つのデータベースコンテキスト、ctxとctx2を使用しました。各データベースを分離していると仮定します。

また、LINQPadを試して、LINQスキルを開発することもできます。

関連する問題