Linq到NHibernate生成多个连接到同一个表

Stu*_*t L 7 sql linq nhibernate join

当我在我的where子句中选择同一个表时,linq到Nhibernate生成两个连接,一个用于选择,一个用于where.即

from child in Session.Query<Child>()
where child.Parent.Name == "Bob" 
select new Info 
{ 
   ParentAge = child.Parent.Age, 
   ChildName = child.Name
};
Run Code Online (Sandbox Code Playgroud)

生成SQL如:

Select this_.Name,
       parent1.Age
From Child this_
     left join Parent parent1 on child.ParentId = parent1.Id,
Parent parent2

Where child.ParentId = parent2.Id and parent2.Name = 'Bob'
Run Code Online (Sandbox Code Playgroud)

我原本以为我应该更喜欢SQL:

Select this_.Name,
       parent1.Age
From Child this_
         inner join Parent parent1 on child.ParentId = parent1.Id
Where parent1.Name = 'Bob'
Run Code Online (Sandbox Code Playgroud)

有没有办法构建查询来获得这个?有关系吗?

Joe*_*l C 1

您是否尝试过比较 SSMS 中每个查询的执行计划?如果在 SQL Server 中消除了重复的联接,那么就没有关系了。我发现在某些情况下,我认为生成的查询效率非常低,但优化后它最终与看起来更好的查询完全相同