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; }
}
Я пытаюсь выбрать верхние 5 элементов SearchText на основе суммы их количества в SearchTextLog. В настоящее время я смог разрешить это, сначала выполнив запрос, чтобы получить верхние 5 элементов, а затем используя результат во втором запросе. Мне было интересно, может ли кто-нибудь показать мне свет и научить меня, как я могу объединить эти два отдельных запроса в единое целое.NHibernate Criteria выбирает товары по группе по сумме и сумме товаров в другой таблице
Вот что я в настоящее время:
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>();
Edit:
О, нет, я просто понял, мое текущее решение потеряет важный заказ результатов. Поэтому мне обязательно придется включать запросы. : -/
Edit:
Я попытался двунаправленного отображения слишком, чтобы следующее заявление, однако, я не могу заставить его вернуться 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, чтобы сообщить механизму запроса сгенерировать это свойство в элементе выбора – Jaguar