2012-03-24 1 views
0

У меня есть запрос linq в Nhibernate.Как присоединиться к linq to 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)); 

Как я могу добавить что-то вроде этого?

My 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'

ответ

0

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

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

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

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