0

私はエンティティ「人」を持っています人は友達のコレクションを持っています(人エンティティも)

LatestLogin で並べ替えられた、特定の人の最初の 10 人の友達を取得したいと考えています。

私の最善の努力は次のとおりです。

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

すべてのユーザーの友達を取得しますが、LatestLogin によって順序付けられていません。何か案は?

4

1 に答える 1

1

奇妙に聞こえるかもしれませんが、解決策は次の行を変更することです。

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

と:

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

なぜこれが必要で、最初は明らかでないのかを理解するには、逆の見方をする必要があります。

ID == person.ID (.Add(p => p.ID == person.ID)) を持つ同じ「親」フレンド (friendAlias) を持つ Person オブジェクト (personAlias) をリクエストしているため、 personAlias.LatestLogin であり、friendAlias.LatestLogin ではありません。

于 2009-11-11T10:44:27.053 に答える