Frage

Ich habe eine Entität "Person" Eine Person hat eine Sammlung von Freunden (auch Personeneinheiten)

Ich möchte die ersten 10 Freunde einer bestimmten Person bekommen, die von Last Login bestellt wurde.

Meine beste Anstrengung ist:

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

Das erfasst alle Freunde von Benutzern, aber sie werden nicht von Last Login bestellt. Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich weiß, es mag seltsam klingen, aber die Lösung besteht darin, die Linie zu ändern:

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

mit:

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

Sie müssen es umgekehrt sehen, um zu verstehen, warum dies am Anfang notwendig und nicht offensichtlich ist.

Sie fordern Personen Objekte (Personalias) an, die denselben "Eltern" -Freund (Freundalias) mit id == Person haben. Personalias.latestlogin und nicht die Freunden. Latestlogin.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top