0

わかりやすくするために、これら3つのテーブルがあると仮定します。

従業員 [id]

EmployeeName [employeeId、name]

EmployeeAddress [employeeId、address]

定義されている唯一のプロパティ/関係は、「サブテーブル」のEmployeeNameとEmployeeAddressにあります。

  • EmployeeNameは従業員に属します
  • EmployeeAddressは従業員に属します

メインのEmployeeテーブルには次のようなプロパティ/関係(コレクション)はありません。

  • 従業員HasManyEmployeeName
  • 従業員HasManyEmployeeAdress。

EmployeeNameとEmployeeAddressの間でのみ(Employeeを含まない)DetachedCriteriaを使用して結合を実行し たいので、


EmployeeNameの内部結合EmployeeAddressからEmployeeName.name、EmployeeAddress.addressを選択します
。ここで、EmployeeName.employeeId = EmployeeAddress.employeeIdであり、EmployeeAddress.addressのような'%somelocation%'のようなEmployeeAddress.addressです。

4

1 に答える 1

1

探しているクエリとは異なり、実際に機能するかどうかはテストされていません。ただし、次のような場合に役立ちます。

var addressCriteria = DetachedCriteria.For<EmployeeAddress>("ea")
                                      .Add(Restrictions.Like("ea.Address", "somelocation", MatchMode.Anywhere));
var nameCriteria = DetachedCriteria.For<EmployeeName>("en")
                                   .Add(Subqueries.PropertyIn("en.Employee", addressCriteria))
                                   .SetProjection(Projections.Property("en.Name"));
于 2011-01-26T13:43:52.307 に答える