2011-01-12 16 views
1

dieser nhibernate Abfrage Gegeben:nHibernate Abfrage Outer Join

var cats = _nhibernateSession.QueryOver<SavedSearchResult>().Where(x => x.UserId == userId && x.IsDeleted == false).JoinQueryOver<SearchCategory>(x => x.SearchCategory) 
.List<SavedSearchResult>().ToList().GroupBy(c => c.SearchCategory.Id); 

Das funktioniert gut, aber wenn eine Kategorie keine Suchergebnisse hat, dann haben wir nicht zurück, um die Kategorien.

Kann jemand einen Ansatz dazu vorschlagen?

Antwort

3

eine äußere Verknüpfung wird über QueryOver wie folgt ausgedrückt:

IQueryOver<Cat,Kitten> catQuery = 
    session.QueryOver<Cat>() 
     .Left.JoinQueryOver(c => c.Kittens) 
      .Where(k => k.Name == "Tiddles"); 

(vom QueryOver docs auf NHForge.org)

in Ihrem Fall also, dies sein wird:

var cats = 
     _nhibernateSession.QueryOver<Categories>() 
        .Left.JoinQueryOver(x => x.SearchCategory) 
        .Where (c => c.UserId == userId && c.IsDeleted = false); 

Ich habe die Gruppierung nach Klausel weggelassen, da ich in Ihrer Auswahl keine aggregierten Spalten sehen kann. (Habe die Abfrage aber auch nicht getestet).