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個項目,然後在第二個查詢中使用結果來解決此問題。我想知道是否有人能告訴我光線,並教我如何將這兩個單獨的查詢集成到一個單元中。NHibernate Criteria選擇項目由組和另一個表內的itemid的總和
這是我目前有:
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對我來說是全新的,需要一種完全不同的思維方式。
檢查更新的代碼,我認爲你需要GroupProperty(生成組)以及Projections.Property告訴查詢引擎在select中生成該屬性 – Jaguar 2010-07-21 14:13:33