2012-03-24 38 views
0

我在nhibernate有一个linq查询。如何加入linq到nhibernate

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

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

此查询用于在人员列表中搜索。我需要在Person和Employee类之间添加连接。在Employee类的属性中添加where条件。

例如它:

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'

回答

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支持。据我所知,它是自3.0 beta版以来的L2N版本,但它是否可靠......?