我正在编写一个连接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
...
选择一个选项或另一个选项会有什么不同吗?
感谢您的建议。
答案 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方言中,您可以在WHERE
或JOIN
中编写连接条件。但不是LINQ的情况。)