2012-03-24 63 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版本,但它是否可靠......?