复杂的linq-to-sql连接4个表:应该有多少where子句?

时间:2012-07-31 19:00:49

标签: c# linq-to-sql

我正在编写一个连接4个表的linq-to-sql查询。我有这样的事情:

var MyQuery = from a in MyDC.Table1
              from b in MyDC.Table2
              from c in MyDC.Table3
              from d in MyDC.Table4
              where .....

我的问题是关于where条款。我可以像这样写一个where子句:

   where a.PropX == b.PropY && b.PropX == c.PropZ && ....

或像这样的多个条款:

   where a.PropX == b.PropY
   where b.PropX == c.PropZ
   ...

选择一个选项或另一个选项会有什么不同吗?

感谢您的建议。

2 个答案:

答案 0 :(得分:4)

我不喜欢上述两种情况;相反,我会遵循SQL语法,它不会隐藏查询的意图:

var query  from a in MyDC.Table1 
           join b in MyDC.Table2 on a.Property1 equals b.Property2
           join c in MyDC.Table3 on b.Property1 equals c.Property5
           join d in MyDC.Table4 on c.Property2 equals d.Property1
select ...

答案 1 :(得分:1)

你不应该这样做。您的代码将生成所有数据源的笛卡尔连接(乘法),然后根据您的条件对其进行过滤。相反,你应该使用Icarus建议的简单连接。

(我理解您的困惑来自哪里:在某些SQL方言中,您可以在WHEREJOIN中编写连接条件。但不是LINQ的情况。)