LINQ join和sub之间的区别

时间:2009-09-02 05:38:07

标签: linq entity-framework

这两个LINQ语句之间是否有任何区别:

var query = from a in entities.A
            where a.Name == "Something"
            from b in entities.B
            where a.Id == b.Id
            select b;

var query = from a in entities.A
            join b in entities.B on a.Id equals b.Id                 
            where a.Name == "Something"
            select b;

两个语句都在进行内连接吗?

另外,我如何查看从实体框架生成生成的SQL语句?

4 个答案:

答案 0 :(得分:3)

这并没有准确回答你的问题,但在LINQ to Entities中使用join几乎总是错误的。在我看来,这两个查询都是错误的。在这种情况下你真正想做的是:

var query = from a in entities.A
            where a.Name == "Something"
            from b in a.Bs // where Bs is the name of the relationship to B on A, 
            select b;      // whatever it's called

您已经具有在数据库外键和实体模型中编码的关系的规范。请勿在查询中复制它。

答案 1 :(得分:1)

从逻辑上讲,这两个陈述正在做同样的事情。如果框架以不同的方式计算它们,那么我就会不为所动。

答案 2 :(得分:1)

您可以获取并比较这些查询的SQL:

((ObjectQuery)query).ToTraceString();

生成的SQL可能(巧妙地)不同,具体取决于EF如何解释这些查询。

仅供参考 - 查询相关实体时不必包含联接。

答案 3 :(得分:0)

看一下sql profiler。你可以得到答案。