2016-03-07 107 views
0
SELECT DISTINCT SOM.CompanyID, 
SOM.BranchID, 
SOM.SOID, 
SOM.TranDocNo, 
SOM.DocDate, 
CM.CustomerName, 
STM.SaleTypeName, 
SOM.NetAmount, 
SOM.TotQty 
FROM tblSODetails SOD WITH (NOLOCK) 
INNER JOIN tblSOMaster SOM WITH (NOLOCK) ON (SOD.SOID = SOM.SOID) 
INNER JOIN tblSaleTypeMaster STM WITH (NOLOCK) ON (SOM.SaleTypeID = STM.SaleTypeID) 
INNER JOIN tblCustomerMaster CM WITH (NOLOCK) on (SOM.CustomerID = CM.CustomerID) 
LEFT OUTER JOIN tblSOReturnDetails SORD WITH (NOLOCK) ON (SOD.SODetID = SORD.SODetID) 
LEFT OUTER JOIN tblSOReturnMaster SORM WITH (NOLOCK) ON (SORD.SOReturnID = SORM.SOReturnID) 
LEFT OUTER JOIN tblOutwardMaster OM WITH (NOLOCK) ON (SOM.TranDocNo = OM.RefTranDocNo) 
LEFT OUTER JOIN tblOutwardDetails OD WITH (NOLOCK) ON (OM.OutwardID = OD.OutwardID AND OD.ItemID = SOD.ItemID) 
WHERE SOM.CompanyID = 1 
and SOM.BranchID = 1 
and SOM.IsOutward = 0 
and SOM.DocTypeID = 3 
and SOM.IsSOReturn = 0 
and SOM.IsDealer = 0 
and STM.IsStockEffect = 1 
and STM.IsSaleOrder = 1 
and SOM.Status = 'AP' 
and CM.IsBlackListed = 0 
AND SOD.Qty > (ISNULL(OD.Qty,0) + ISNULL(SORD.Qty,0)) 

如何在窗體的LINQ查詢.. ,具體的最後一道Query.To寫在LINQ查詢我怎麼可以這樣寫SQL查詢到LINQ查詢

我寫這篇文章寫這個SQL查詢查詢來解決我的問題。

(from SOD in db.tblSODetails 
           join SOM in db.tblSOMasters on SOD.SOID equals SOM.SOID 
           join STM in db.tblSaleTypeMasters on SOM.SaleTypeID equals STM.SaleTypeID 

SOM.CustomerID等於CM.CustomerID 在SOD.SODetID db.tblSOReturnDetails加入SORD等於SORD.SODetID到SORD_join

       from SORD in SORD_join.DefaultIfEmpty() 



           from CM in db.tblCustomerMasters.Where(
           CM => CM.CustomerID == SOM.CustomerID && (CM.IsBlackListed == false)) 
           SOD.SODetID).DefaultIfEmpty() 

           join SORM in db.tblSOReturnMasters on SORD.SOReturnID equals SORM.SOReturnID into SORM_join 

           from SORM in SORM_join.DefaultIfEmpty() 

           join OM in db.tblOutwardMasters on new { TranDocNo = SOM.TranDocNo } equals 
           new { TranDocNo = OM.RefTranDocNo } into OM_join 

           from OM in OM_join.DefaultIfEmpty() 

           join OD in db.tblOutwardDetails on new { OM.OutwardID, SOD.ItemID } equals 
           new { OD.OutwardID, OD.ItemID } into OD_join 

           from OD in OD_join.DefaultIfEmpty() 

           where (SOM.CompanyID == compID) 
          && (SOM.BranchID == BranchID) 
          && ((isOutward == -1) || (SOM.IsOutward == (isOutward == 1 ? true : false))) 
          && (SOM.DocTypeID == 3) 
          && (SOM.Status == "AP") 
          && (SOM.IsSOReturn == false) 
          && (SOM.IsDealer == false) 
          && (STM.IsStockEffect == true) 
          && (STM.IsSaleOrder == true) 
          && ((SOM.TranDocNo.Contains(strDocTypeCode))) 
          && SOD.Qty > (((System.Decimal?)(OM.TotQty) ?? (System.Decimal?)0) + ((System.Decimal?)(SORM.TotQty) ?? (System.Decimal?)0)) 

           select new 
           { 
            SOM.CompanyID, 
            SOM.BranchID, 
            SOM.SOID, 
            TranDocNo = SOM.TranDocNo, 
            DocDate = SOM.DocDate, 
            CustomerName = CM.CustomerName == null ? "" : CM.CustomerName, 
            DealerName = "", 
            STM.SaleTypeName, 
            NetAmount = SOM.NetAmount, 
            TotQty = SOM.TotQty 
           } 
          ).Distinct(); 
+0

到目前爲止您嘗試了什麼? – Daniel

+0

問題沒有顯示任何研究工作,請告訴我們你有什麼嘗試。 – gofr1

+0

使用此代碼獲得解決方案。 1. SOD.Qty>(((System.Decimal?)(OD.TotQty)??(System.Decimal?)0)+((System.Decimal?)(SORD.TotQty)??(System.Decimal?)0)) –

回答

1

有一個在LINQ 流暢和查詢表達式的風格,如果你想您的項目數據訪問使用LINQ。然後,您需要開始使用LINQ樣式之一開始編寫查詢。 我不建議寫sql查詢然後轉換它,你會浪費很多時間做這件事。一旦你對LINQ很熟悉並且很熟悉,你會發現使用LINQ而不是轉換開始查詢要容易得多。

使用查詢表達是連接表的begineer更容易,而從一個表只是retriving數據流利款式容易得多。

如此虐待開始與查詢風格

from thing1 in table1 join thing2 in table2 on thing1.Id equals thing2.Thing1Id 
select new // anonymous type 
{ 
Thing1Column= thing1.SomeColumn, 
Thing2Comumn= thing2.SomeColumn, 
BlaBlaBla= thingX.blablabla 
}; 

,或者您可以使用流利式

連接操作符需要多個參數:

  • 的IEnumerable內 - 內部序列。
  • Func outerKeySelector - 在外部序列 元素中加入的密鑰。
  • Func innerKeySelector - 在內部序列 元素中加入什麼鍵。
  • Func鍵resultSelector - 什麼輸出元件將 像

Table1.Join(表2,(Thing1 outerKey)=> outerKey.Id,(Thing2 innerKey)=> innerKey.Thing1Id,( thing1,thing2)=> thing1.AnyColumn +「 - 」+ thing2.AnyOtherColumn);

Thing1是類(模型) thing1是從該類

的對象是爲內部爲左外則需要DefaultIfEmpty() ,讓你具有在沒有匹配的元件的結果第二張桌子

from thing1 in table1 join thing2 in table2 on thing1.Id equals thing2.Thing1Id into thingies2Group from x in reviewGroup.DefaultIfEmpty(new Thing2{MayBeEmptyValuesColumn= "DefaultValueIfEmpty"}) 
select new // anonymous type 
{ 
Thing1Column= thing1.SomeColumn, 
Thing2Comumn= x.MayBeEmptyValuesColumn, 
BlaBlaBla= thingX.blablabla 
}; 
+0

謝謝...哈桑...這是對我完全幫助。 –

+0

歡迎您提供關於LINQ的更多詳細信息,然後我會在一本書中提供建議,以完美的方式解釋所有細節。它被稱爲[LINQ_Succinctly](https://www.syncfusion.com/resources/techportal/ebooks/linq),我認爲它是免費的。最後一件事,如果我的答案可以幫助你,請標記爲已解決或答案+1。 – Hasan