下面是一個簡單的示例場景 -NHibernate ICriteria - 按子收藏數量排序?
'標籤'有很多'問題'。當我得到一個標籤列表時,如何使用Criteria API按標籤問題計數排序?
我已經做過這個,但在4個月左右沒有碰過NH,並且已經忘記了...預測可能嗎?幫幫我!!!
感謝
下面是一個簡單的示例場景 -NHibernate ICriteria - 按子收藏數量排序?
'標籤'有很多'問題'。當我得到一個標籤列表時,如何使用Criteria API按標籤問題計數排序?
我已經做過這個,但在4個月左右沒有碰過NH,並且已經忘記了...預測可能嗎?幫幫我!!!
感謝
坐下來,一雙新鮮的眼睛和想通了...標籤現在通過對標籤問題集合(視圖)一個屬性格式..這讓很多更SENCE在我的域名比孩子
public IList<Tag> GetTop(int numberOfTags)
{
using (ITransaction transaction = Session.BeginTransaction())
{
DetachedCriteria detachedCriteria = DetachedCriteria.For<Tag>()
.CreateCriteria<Tag>(x => x.Questions)
.AddOrder<Question>(x => x.Views, Order.Desc)
.SetMaxResults(numberOfTags)
.SetProjection(Projections.Distinct(Projections.Id()));
IList<Tag> tags = Session.CreateCriteria<Tag>()
.SetFetchMode<Tag>(x => x.Questions,FetchMode.Join)
.Add(LambdaSubquery.Property<Tag>(x => x.Id).In(detachedCriteria))
.SetResultTransformer(new DistinctRootEntityResultTransformer())
.List<Tag>();
transaction.Commit();
return tags;
}
}
嘗試:
var tags = Session.CreateCriteria(typeof(Tag))
.AddOrder(Order.Asc("Tag.Question.Id")
.List<Tag>();
// If that does not work, try:
var tags = Session.CreateCriteria(typeof(Tag))
.CreateCriteria("Question", "TagQuestion", JoinType.InnerJoin)
.AddOrder(Order.Asc("TagQuestion.Id")
.List<Tag>();
編輯:除非你決定反對或者你已經與標準API舒服,你應該看一看在任HQL或NHibernate.Linq:
var tags = Session.Linq<Tag>()
.OrderBy(tag => tag.Question.Id)
.ToList();
不正是我之後的數順序進行排序更多類似這樣的內容: - (哪個會失敗) Session.Linq().OrderBy(tag => tag.Questions.Count).ToList(); –
2010-07-26 14:36:33