鉴于这个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);
这很有效,但如果某个类别没有任何搜索结果,那么我们就不会重新获得这些类别。
有人可以提出一个方法吗?
答案 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中没有看到任何聚合列。 (尽管也没有测试过查询。)