Как присоединиться в linq к nhibernate - PullRequest
0 голосов
/ 24 марта 2012

У меня есть запрос linq в Nhibernate.

var q = SessionInstance.Query<Person>();

if (!String.IsNullOrEmpty(dto.FirstName))
   q = q.Where(x => x.FirstName.Contains(dto.FirstName));

Этот запрос для поиска в списке лиц. Мне нужно добавить соединение между классами Person и Employee. для добавления условия where для свойства в классе Employee.

Например, это:

if (dto.Type == PersonEnumType.EmployeeType)
   q = q.Where(employee => employee.Code.Contains(dto.Code));

Как мне добавить что-то подобное?

Мой SQL-запрос похож на это:

select * from Person_Table left outer join Employee_Table on Person_Table.Id = Employee_Table.Person_id_fk where Person_Table.FirstName like '%Phill%' and Employee_Table.Code like '332'

1 Ответ

0 голосов
/ 24 марта 2012

Трудно сказать, как это сделать, не зная ваших сопоставлений, но это может быть что-то вроде этого:

q.Where(x => x.FirstName.Contains(dto.FirstName))
    .Where(x => x.Employees.Any(emp => emp.Code.Contains(dto.Code)))

Если есть Person.Employees вообще.Но я должен признать, что не знаю, поддерживает ли Linq to NHibernate Any().Вероятно, это зависит от того, какую версию L2N вы используете.

Если это не сработает, вам следует попытать счастья с GroupJoin() (из-за внешнего соединения), но я еще больше не уверен в полной поддержке L2Nдля этого.Насколько я вижу, это в L2N начиная с 3.0 beta, но надежно ли это ...?

...