我有 3 个 NHibernate 实体
Division
{
Id (PK),
Name
}
District
{
Id (PK),
Name
}
Doctor
{
Id (PK),
Name,
Division,
District
}
我想让医生按部门和地区过滤。
我可以通过两种方式编写查询,比如说我有一个用户选择的部门,我想要这个部门下的医生。
第一种方式:
var doctors = doctorRepository
.FilterBy(x => x.Division.Id == selectedDivision.Id)
.ToList();
第二种方式:
var doctors = doctorRepository
.FilterBy(x => x.Division == selectedDivision)
.ToList();
我的第一个问题是,考虑性能的最佳方式是什么?
我检查了两个查询的 sql 分析器。对于第一个查询,生成的 sql 包含与分区表的左外连接。我不明白为什么它需要加入 Division 表,因为 DivisionId 驻留在 Doctor 表中。这个额外的连接会降低性能吗?
我的第二个问题:如果我想使用 Division 和 District 从医生存储库中查询,并且 Division 和 District 有时都可以为空,在这种情况下,我应该如何在 NHibernate Linq 中编写这个查询?