public class SearchText
{
public virtual int Id { get; set; }
public virtual string Text { get; set; }
}
public class SearchTextLog
{
public virtual int Id { get; set; }
public virtual SearchText SearchText { get; set; }
public virtual User User { get; set; }
public virtual int SearchCount { get; set; }
public virtual DateTime LastSearchDate { get; set; }
}
我正在尝试根据 SearchTextLog 中的计数总和来选择前 5 个 SearchText 项目。目前,我只能通过首先执行查询以获取前 5 个项目,然后在第二个查询中使用结果来解决此问题。我想知道是否有人可以向我展示灯光并教我如何将这两个单独的查询集成到一个单元中。
这是我目前拥有的:
var topSearchCriteria = Session.CreateCriteria(typeof (SearchTextLog))
.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty("SearchText.Id"))
.Add(Projections.Alias(Projections.Sum("SearchCount"), "SearchCount")))
.AddOrder(Order.Desc("SearchCount"))
.SetMaxResults(topSearchLimit)
.List<int>();
return Session.CreateCriteria<SearchText>()
.Add(Restrictions.In("Id", topSearchCriteria.ToArray()))
.List<SearchText>();
编辑:
哦,不,我刚刚意识到我当前的解决方案将失去结果的重要顺序。所以我一定要合并查询。:-/
编辑:
我也尝试了双向映射以允许以下语句,但是,我无法让它返回 SearchText 项。它只是抱怨 SearchText 属性不在分组中。
return Session.CreateCriteria<SearchText>()
.CreateAlias("SearchTextLogs", "stl")
.AddOrder(Order.Desc(Projections.Sum("stl.SearchCount")))
.SetMaxResults(topSearchLimit)
.SetResultTransformer(Transformers.AliasToEntityMap)
.List<SearchText>();
请原谅我的无知,但 Nhibernate 对我来说是全新的,需要一种完全不同的思维方式。