2013-04-25 90 views
3

我試圖模仿:LINQ;如何執行多條件的左外連接?

DB1 AS A LEFT OUTER JOIN 
DB2 AS B 
ON A.[Currency Code] = B.[Currency Code] 
AND A.[Document Date] >= B.[Starting Date] 
AND A.[Document Date] <= B.[Ending Date] 

這是我現在有:

from ledgers in ledgerEntries 
join currency in currencyExchange 
    on ledgers.CurrencyCode equals currency.CurrencyCode 
     into c 
from currencies in c.DefaultIfEmpty() 
where 
    ledgers.DocumentDate >= currencies.StartingDate 
    && ledgers.DocumentDate <= currencies.EndingDate 

我讀過有關創建一個匿名類型和設置它們彼此相等,但是這並未使用小於和大於比較日期時不起作用。

回答

4

看來this答案是我正在尋找。

from ledgers in ledgerEntries 
join currency in currencyExchange 
    on ledgers.CurrencyCode equals currency.CurrencyCode 
     into c 
from currencies in c.Where(currency => currency.StartingDate <= ledgers.DocumentDate 
&& currency.EndingDate <= ledgers.DocumentDate).DefaultIfEmpty() 

this答案相結合,我可以簡化爲:

from ledgers in ledgerEntries 
from currencies in currencyExchange.Where(
    currency => currency.CurrencyCode == ledgers.CurrencyCode 
    && currency.StartingDate <= ledgers.DocumentDate 
    && currency.EndingDate <= ledgers.DocumentDate).DefaultIfEmpty()