这两个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语句?
答案 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。你可以得到答案。