Pregunta

Tengo una entidad 'Persona' una persona tiene una colección de entidades Amigos (también persona)

Quiero conseguir los primeros 10 amigos de una persona en particular, ordenada por LatestLogin.

Mi mejor esfuerzo es:

    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>();
    }

que no agarrar todos los amigos de los usuarios, pero no están clasificadas por LatestLogin. ¿Alguna idea?

¿Fue útil?

Solución

Sé que puede sonar extraño, pero la solución es cambiar la línea:

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

por:

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

Hay que verlo al revés con el fin de entender por qué esto es necesario y no es evidente desde el principio.

Usted está solicitando objetos persona (personAlias) que tienen el mismo amigo 'Padre' (friendAlias) con ID == person.ID (.Add (p => p.ID == person.ID)), por lo tanto lo que necesita ordenar por la personAlias.LatestLogin y NO el friendAlias.LatestLogin.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top