2012-03-24 11 views
0

Ich habe eine Linq-Abfrage in Nhibernate.Wie in linq zu nhibernate

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

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

Diese Abfrage ist für Suche in Personenliste. Ich muss eine Verknüpfung zwischen Personen- und Angestelltenklassen hinzufügen. Fügen Sie für eine Eigenschaft in Employee-Klasse eine where Bedingung hinzu.

Zum Beispiel es:

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

Wie kann ich so etwas wie es hinzufügen?

Meine SQL-Abfrage ist dies ähnlich:

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'

Antwort

0

Es ist schwer zu sagen, wie dies zu tun, ohne Ihre Zuordnungen zu wissen, aber es könnte so etwas wie diese:

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

Wenn es eine Person gibt. Mitarbeiter überhaupt. Aber ich muss zugeben, ich weiß nicht, ob Linq zu NHibernate Any() unterstützt. Das hängt wahrscheinlich davon ab, welche Version von L2N du verwendest.

Wenn das nicht funktioniert, sollten Sie Ihr Glück mit GroupJoin() versuchen (wegen der äußeren Join), aber ich bin noch unsicherer über solide L2N-Unterstützung für diesen. Soweit ich das beurteilen kann ist es in L2N seit 3.0 Beta, aber ob es zuverlässig ist ...?