私は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 に分割テーブルを使用した左外部結合が含まれています。DivisionId が Doctor テーブルに存在するため、Division テーブルと結合する必要がある理由がわかりません。この余分な結合はパフォーマンスを低下させますか?
2 番目の質問: Division と District を使用して Doctor リポジトリからクエリを実行したい場合、 Division と District の両方が null になることがあります。この場合、NHibernate Linq でこのクエリをどのように記述すればよいですか?