2009-05-02 13 views
0

У меня есть сущность Рецепты, и у нее есть комментарии коллекции HasMany.NHibernate Сортировка a имеет много коллекций

В действии контроллера MVC я получаю рецепт , а затем отображаю комментарии.

Как отсортировать комментарии в порядке убывания "EnteredOn"?

Где их сортировать?

Recipe recipe = session.Load<Recipe>(id); 
    NHibernateUtil.Initialize(recipe.Comments); 

Malcolm

ответ

2

Я думаю, что я бы просто получить комментарии, как есть (не отсортирован частичном), а затем просто сортировать коллекцию Комментарии рецепта, прежде чем отобразить комментарии.

В зависимости от того, как вы создали свой класс, и вашего сопоставления, я думаю, что это единственный способ, поскольку отображение набора и суммирования представляет собой неупорядоченные коллекции в NHibernate.

Что-то вроде этого:

Recipe recipe = session.Get<Recipe> (id); 

var orderedComments = recipe.Comments.OrderBy (comment => comment.EnteredOn); 

foreach(Comment c in orderedComments) 
{ 
    // display the comment 
} 

Где моя Reciple сущность выглядит примерно так:

public class Recipe 
{ 
    // ... 
    ... 

    private ISet<Comment> _comments = new HashedSet<Comment>(); 

    public ReadOnlyCollection<Comment> Comments 
    { 
     get { return _comments.ToList().AsReadOnly(); } 
    } 

    public void AddComment(Comment c) 
    { 
     if(c != null && !_comments.Contains (c)) 
     { 
      c.Recipe = this; 
      _comments.Add (c); 
     } 
    } 

    public void RemoveComment(Comment c) 
    { 
     if(c != null && _comments.Contains (c)) 
     { 
      c.Recipe = null; 
      _comments.Remove(c); 
     } 
    } 
} 

и отображение:

<class name="Recipe" table="Recipes"> 
    ... 
    <set name="Comments" access="field.camelcase-underscore" ... > 
     ... 
    </set> 
</class>