Pergunta

Eu tenho uma entidade 'pessoa' Uma pessoa tem uma coleção de amigos (também entidades pessoais)

Quero receber os 10 primeiros amigos de uma pessoa em particular, encomendados pelo mais recente.

Meu melhor esforço é:

    public static IList<Person> GetFriends(Person person, int count)
    {
        Person personAlias = null;
        Person friendAlias = null;

        ICriteria criteria = NHibernateSessionManager.Instance.GetSession()
            .CreateCriteria(typeof (Person), () => personAlias)
            .CreateCriteria(() => personAlias.Friends, () => friendAlias, JoinType.LeftOuterJoin)
            .AddOrder(() => friendAlias.LatestLogin, Order.Desc)
            .Add<Person>(p => p.ID == person.ID)
            .SetMaxResults(count);
        return criteria.List<Person>();
    }

O que pega todos os amigos dos usuários, mas eles não são encomendados pelo mais recente. Alguma ideia?

Foi útil?

Solução

Eu sei que pode parecer estranho, mas a solução é mudar a linha:

.AddOrder(() => friendAlias.LatestLogin, Order.Desc)

com:

.AddOrder(() => personAlias.LatestLogin, Order.Desc)

Você precisa ver o contrário, a fim de entender por que isso é necessário e não óbvio no início.

Você está solicitando objetos de pessoa (Personalias) que têm o mesmo amigo 'pai' (friendalias) com id == pessoa.id (.add (p => p.id == pessoa.id)), portanto, você precisa classificar pelo Personalias.latestlogin e não os amigos.latestlogin.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top