2013-04-25 89 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()