2
有没有一种方法来实现与NHibernate ICriteria或QueryOver这样的SQL?通过与NHibernate的ICriteria或QueryOver的聚合子查询顺序
select *
from [BlogPost] b
inner join (select blogpost_id, count(*) matchCount
from [Tag]
where name in ('tag X', 'tag Y')
group by blogpost_id
) tagmatch
on tagmatch.blogpost_id = b.Id
order by tagmatch.matchCount desc
目的是通过匹配标签的数量排名的博客文章,以便与后两者标记X和标签ÿ自带以上只是标记X职位。
我有了这个迄今:
DetachedCriteria
.For<Tag>("tag")
.Add(Restrictions.In(Projections.Property<Tag>(x => x.Name), tags.ToArray()))
.SetProjection(Projections.Group<Tag>(t => t.BlogPost))
.CreateCriteria("BlogPost")
.SetFetchMode("BlogPost", FetchMode.Eager)
.AddOrder(Order.Desc(Projections.RowCount()));
然而,得到的查询不连接抓取BlogPost
。相反,它仅返回ID,当迭代BlogPost
时,导致选择n + 1。
public class BlogPost
{
...
ISet<Tag> Tags {get; set;}
}
public class Tag
{
BlogPost BlogPost { get; set; }
string Name { get; set; }
}
This looks like a similar issue.
与NHibernate 3这是现在可能吗?
如果没有,是否有其他解决方案?
如有必要,我可以更改模式&域模型。如果可能,我不想使用SQL或HQL。
我的问题已通过更改数据库模式解决,但您链接的答案看起来像他们将解决我的问题。 – mattk 2012-06-07 11:42:25