nHibernate查询外连接

时间:2011-01-12 09:42:48

标签: nhibernate join

鉴于这个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);

这很有效,但如果某个类别没有任何搜索结果,那么我们就不会重新获得这些类别。

有人可以提出一个方法吗?

1 个答案:

答案 0 :(得分:3)

外部联接通过QueryOver表达,如下所示:

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

(来自NHForge.org上的QueryOver文档)

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

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

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