为了通过集合体查询有它能够ICriteria或QueryOver
-
16-10-2019 - |
题
有没有办法实现SQL这样它能够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 和 标签Y 配备上述职位的只是 标记了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
.相反,它只返回的身份证,这导致选择n+1时 BlogPost
s迭代.
public class BlogPost
{
...
ISet<Tag> Tags {get; set;}
}
public class Tag
{
BlogPost BlogPost { get; set; }
string Name { get; set; }
}
这是现在能够用它能够3?
如果没有,是否有一个替代解决方案吗?
我可以改变的架构和域模型,如果有必要的。我不想使用SQL或非常,如果可能的。
不隶属于 StackOverflow