Jen

用Linq 實現Left、Right Join

當2個Table之間是多對多關係時,我們可能會在中間卡一個弱實體的table

(是叫弱實體吧- -?有點忘了)

 

test1

 

如果我們要把JEN_PARTIONPARTION_PRODUCT join起來,

 

就算PARTION_PRODUCT 沒有JEN_PARTION的相關記錄,我們也要透出來,

 

用一般的join是不會有資料的,這時我們就會用到Left Join

 

 

a.假設要left join JEN_PARTIONPARTION_PRODUCT 資料表

 

一般我們會這樣下SQL.

 

SELECT [t0].[ID],[t0].[PNAME], [t1].[PRODUCTID] , [t1].[PARTIONID]
FROM [JEN_PARTION] AS [t0]
LEFT OUTER JOIN [PARTION_PRODUCT] AS [t1] ON [t0].[ID] = [t1].[PARTIONID]

 

在LINQPad 下看到得結果是

test2

 

 

 

轉成LINQ就是…

from p in JEN_PARTIONs
join s in PARTION_PRODUCTs on 
	p.ID equals s.PARTIONID into k
from s in k.DefaultIfEmpty()
select new
{
	ID = p.ID,
	PName = p.PNAME,
	PARTIONID = s == default(PARTION_PRODUCT) ? 
		"null" : s.PARTIONID.ToString(),
	PRODUCTID = s == default(PARTION_PRODUCT) ? 
		"null" : s.PRODUCTID.ToString()
}
 
LINQPad下的結果是
test3 
 
疑,結果一樣的喔~~

But, 上面這段LINQ 在LINQPad裏面轉成SQL,有點噁心…像這樣…(因為轉型的關係)

test4

 

 

所以,要用LIQN寫left join參考一下吧…(或許有更好的寫法 !?)

 

參考

0 意見: