Domanda

Ho un soggetto 'persona' una persona ha una collezione di amici (anche entità persona)

Voglio ottenere i primi 10 Amici di una persona in particolare, in ordine di LatestLogin.

Il mio miglior sforzo è:

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

che fa afferrare tutti gli amici degli utenti, ma non sono ordinate per LatestLogin. Tutte le idee?

È stato utile?

Soluzione

Lo so che può sembrare strano, ma la soluzione è quella di cambiare la linea:

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

con:

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

Bisogna vedere l'altro senso intorno per capire il motivo per cui ciò è necessario e non ovvio all'inizio.

Stai richiedendo oggetti Person (personAlias) che hanno lo stesso amico 'Parent' (friendAlias) con ID == person.ID (.Add (p => p.ID == person.ID)), pertanto è necessario ordina per il personAlias.LatestLogin e NON il friendAlias.LatestLogin.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top