1

我正在编写一个连接 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
   ...

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

感谢您的建议。

4

2 回答 2

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 ...
于 2012-07-31T19:07:32.613 回答
1

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

(我了解您的困惑来自哪里:在某些 SQL 方言中,您可以在WHERE或 中编写连接条件JOIN。但 LINQ 并非如此。)

于 2012-07-31T19:58:23.403 回答