2015-09-03 196 views
1

我有幾張大表,我需要加入它們。在SQL它看起來像:LINQ多個連接有多個條件

select * from dbo.Table1 t1 
join dbo.Table1 t1Parent on t1.ParentId = t1Parent.Id 
join dbo.MappingT1T3 t2 on t1Parent.Id = t2.ExternalId and t2.[Type] = 1 
join dbo.Table3 t3 on t2.ForeignId = t3 .Id 
where t1.[Type] = 3 

此次嘗試查詢轉換爲這樣的LINQ:

from t1 in dbo.Table1 
join t1Parent in dbo.Table1 on t1.ParentId equals t1Parent.Id 
join t2 in dbo.MappingT1T3 on new { Id = t1Parent.Id, [Type] = (int)1 } equals new { Id = t2.ExternalId, [Type] = (int)t2.[Type] } 
join t3 in dbo.Table3 on t2.ForeignId equals t3.Id 
where t1.[Type] == 3; 

但似乎執行計劃不同了很多。資料說,它會嘗試加載的所有表無條件..

回答

1

嘗試將不斷以一個單獨的條件......

from t1 in dbo.Table1 
where t1.[Type] == 3 // <--- PUT THIS ONE HIGHER 
join t1Parent in dbo.Table1 on t1.ParentId equals t1Parent.Id 
join t2 in dbo.MappingT1T3 on t1Parent.Id equals Id = t2.ExternalId 
where (int)t2.[Type] == 1 // <--- SEPARATE CONDITION 
join t3 in dbo.Table3 on t2.ForeignId equals t3.Id;