2012-03-24 12 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のどのvesionを使用しているかによって異なります。

これがうまくいかない場合は、GroupJoin()(外部結合のため)であなたの運を試してみるべきですが、私はそのための堅固なL2Nサポートについてさらに不安です。限り、私はそれが3.0ベータ版以来L2Nであることがわかりますが、それが信頼できるかどうか...?