Соедините две таблицы, сравнив одинаковое значение в двух столбцах - PullRequest
0 голосов
/ 26 января 2011

Для простоты и ясности предположим, что у меня есть эти три таблицы.

Employee [ Я бы ]

EmployeeName [ EmployeeID, название ]

EmployeeAddress [ EmployeeID, адрес ]

Единственные определенные свойства / отношения определены в «вложенных таблицах» EmployeeName & EmployeeAddress

  • EmployeeName принадлежит сотруднику
  • Адрес сотрудника принадлежит сотруднику

Там нет свойств / отношений (коллекции) в основной таблице Employee, такой как

  • Сотрудник HasMany EmployeeName
  • Сотрудник HasMany Адрес сотрудника.

Я хочу выполнить соединение, используя DetachedCriteria между EmployeeName и EmployeeAddress только (без привлечения Employee) , как таковое

выберите EmployeeName.name, EmployeeAddress.address
из EmployeeName внутреннее соединение EmployeeAddress
где EmployeeName.employeeId = EmployeeAddress.employeeId и EmployeeAddress.address, например "% somelocation%", по EmployeeAddress.address

1 Ответ

1 голос
/ 26 января 2011

Не совсем тот запрос, который вы ищете и не проверяли, работает ли он на самом деле ... но он может помочь вам:

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"));
...