我試圖將下面的Oracle Sql查詢轉換爲linq,但沒有取得太大的成功。我不知道如何處理AND ShipSeq = i.ShipSeq(+)
,我知道這是在Oracle中的LEFT OUTER JOIN
。我在LinqPad中測試下面的Linq查詢,在那裏我沒有得到任何語法錯誤,但是它在執行查詢時出錯。有任何想法嗎?將具有左外部聯接的Oracle SQL查詢轉換爲Linq
的Oracle SQL查詢
SELECT *
FROM CustomerShip,
(SELECT DISTINCT b.ShipSeq AS shipSeq
FROM Orders a,
CustomerShip b
WHERE a.OrderId IN (SELECT OrderId
FROM Orders
WHERE CustomerId = @CustomerId
AND OrderType <> 'A')
AND b.CustomerId = @CustomerId
AND b.ShipSeq = a.CustShip
AND OrderStatus <> 'C'
GROUP BY b.ShipSeq) i
WHERE CustomerId = @CustomerId
AND (Address NOT LIKE '%RETAIL%STORE%')
AND ShipSeq = i.ShipSeq(+)
ORDER BY ShipTo DESC, OrderDate DESC;
LINQ查詢
var query = from s in CustomerShip
join m in Orders on s.ShipTo equals m.ShipTo into temp
from x in temp.DefaultIfEmpty()
where (from o in Orders
from c in CustomerShip
where (from x in CustomerOrders
where x.CustomerId == customerId
&& !x.OrderType.Equals("A")
select x.OrderId).Contains(o.OrderId)
&& c.CustomerId == customerId
&& c.ShipTo == o.ShipTo
&& !o.OrderStatus.Equals("C")
select c.ShipTo).Distinct().Contains(s.ShipTo)
&& s.CustomerId == customerId
&& !s.Address.Contains("RETAIL")
&& !s.Address.Contains("STORE")
orderby s.ShipTo descending, s.OrderDate descending
select s;
這可能有助於(https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b)有一個部分上加入 –