Question

J'ai une personne entité 'personne' a une collection d'amis (aussi entités Person)

Je veux obtenir les 10 premiers amis d'une personne en particulier, ordonnée par LatestLogin.

Mon meilleur effort est:

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

Ce qui ne saisit tous les utilisateurs amis, mais ils ne sont pas commandés par LatestLogin. Toutes les idées?

Était-ce utile?

La solution

Je sais que cela peut paraître bizarre, mais la solution est de changer la ligne:

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

avec:

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

Vous devez voir l'autre sens afin de comprendre pourquoi cela est nécessaire et pas évident au début.

Vous demandez des objets personne (de personAlias) qui ont le même 'Parent' ami (friendAlias) avec ID == person.ID (.Add (p => p.ID == person.ID)) donc vous devez sorte par le personAlias.LatestLogin et pas le friendAlias.LatestLogin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top