2011-01-12 90 views
1

鉴于这种NHibernate的查询:NHibernate的查询外连接

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); 

这种运作良好,但如果一个类没有任何搜索结果,那么我们没得到的类别回来。

任何人都可以提出一个方法吗?

回答

3

外连接是通过QueryOver这样表示:

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

(从QueryOver上NHForge.org文档)

所以,你的情况,这将是:

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

我省略了group by子句,因为在您的select中没有看到任何聚合列。 (尽管如此,还没有测试过查询)。