我有多個表,我想多加入和離開的的LINQ一起加入他們。我嘗試了兩種不同的方法來實現它,看起來他們都返回正確的結果。哪種方法更適合Linq的多重連接和左連接?
但每種方法產生不同的SQL查詢。例如方法1也爲查詢結尾的某些鍵生成Order By
。
我的問題是: 哪種方法你建議嗎?爲什麼(性能& ...)?
方法1:
from t1 in Table1
// Inner Join on a foreign key in tb1
join t2 in Table2 on t1.fkId1 equals t2.Id1
// Left Join
join t3 in Table3 on t1.fkId1 equals t3.Id1 into ServCons
from t3 in ServCons.DefaultIfEmpty()
// Left Join
join t4 in Table4 on t3.Id2 equals t4.Id2 into t4
select new{t1,t2,t3,t4}
方法2:
from t1 in Table1
// Inner Join on a foreign key in tb1
from t2 in Table2 .Where(w=>t1.fkId1 == t2.Id1)
// Left Join
from t3 in Table3 .Where(w=>t1.fkId1 == w.Id1).DefaultIfEmpty()
// Left Join
from t4 in Table4 .Where(w=>t3.Id2 ==w.Id2).DefaultIfEmpty()
select new{t1,t2,t3,t4}
更新:
我認爲這是明顯,性能是一個程序和程序員的一個重要問題。 更低的成本更快的結果也是我的目標。所以,當我提及不同的SQL查詢一個有關性能的問題顯然不夠,一個好的寫關於優點和他們的將被接受的答案利弊兩種方法之間的比較。
更好?在哪方面? –
我不認爲他們會返回相同的結果。第一個是_inner join_,但不是第二個_outer_ join?如果您還發布了生成的sql,它可能會有所幫助。 –
這些看起來像不同的查詢。即使他們是相同的,只有你可以根據你的數據來判斷哪個更快。另外第二個查詢是混合Linq樣式,這可能會讓人困惑。 – DavidG