2010-07-25 76 views
2

下面是一個簡單的示例場景 -NHibernate ICriteria - 按子收藏數量排序?

'標籤'有很多'問題'。當我得到一個標籤列表時,如何使用Criteria API按標籤問題計數排序?

我已經做過這個,但在4個月左右沒有碰過NH,並且已經忘記了...預測可能嗎?幫幫我!!!

感謝

回答

1

坐下來,一雙新鮮的眼睛和想通了...標籤現在通過對標籤問題集合(視圖)一個屬性格式..這讓很多更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; 
     } 
    } 
0

嘗試:

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>(); 
  1. Ordering on joined columns.
  2. Ordering the query criteria

編輯:除非你決定反對或者你已經與標準API舒服,你應該看一看在任HQLNHibernate.Linq

var tags = Session.Linq<Tag>() 
       .OrderBy(tag => tag.Question.Id) 
       .ToList(); 

Linq to NHibernate: a vast improvement.

+1

不正是我之後的數順序進行排序更多類似這樣的內容: - (哪個會失敗) Session.Linq ().OrderBy(tag => tag.Questions.Count).ToList(); – 2010-07-26 14:36:33