这是使用
NHibernate.LambdaExtensions
但是应该很容易转换成标准条件查询或hql查询。
var query1 = DetachedCriteria.For<Post>()
.CreateCriteria<Post>(x => x.Comments)
.Add<Comment>(x => x.CreatedDate >= DateTime.Now.AddDays(-5));
query1.GetExecutableCriteria(session).List<T>();
您可能还希望急切地加载集合,并将您的限制设置为适用于您希望避免将整个数据库拉回来的内容,以及在延迟加载的列表上迭代的n+1查询条件。
使用nhibernate解决任何类型的复杂查询的第一步是从原始sql开始,因此我们确实需要从
Select P.*
From Post P
Where P.PostID Exists (
Select P1.PostID
From Posts P1 Inner Join Comments C ON ( P1.PostID = C.PostID )
Where P1.PostID Exists (
Select Top 5 C1.PostID, Count(*) as PostCount
From Comments C1
Group By C1.PostID
Order By PostCount DESC
)
And C.CreateDate > Now - 5 days
)
这是手工编写的,因此这更接近于查询,应该能够为您指出能够解决查询的方向。有了这方面的一些反馈,我可以添加更多关于翻译成NH。最后一个外部存在可能会在最终的nh版本中被删除,因为我相信带有注释的post矩阵就是nh将如何急切地加载实体。