我有多个表,我想多加入和离开的的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