有没有办法实现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时 BlogPosts迭代.

public class BlogPost
{
  ...
  ISet<Tag> Tags {get; set;}
}

public class Tag
{
  BlogPost BlogPost { get; set; }
  string Name { get; set; }
}

这看起来像一个类似的问题。

这是现在能够用它能够3?

如果没有,是否有一个替代解决方案吗?

我可以改变的架构和域模型,如果有必要的。我不想使用SQL或非常,如果可能的。

有帮助吗?

解决方案

我知道这个问题被放前一段时间,但我想做同样的事情,请看看我的问题 在这里,, 和这个家伙 在这里,, 也许你可以使用的想法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top