سؤال

لدي شخص "شخص" شخص لديه مجموعة من الأصدقاء (أيضا كيانات الشخص)

أريد الحصول على أول 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>();
    }

الذي يستطع جميع المستخدمين، لكنهم لا يرتبطون بأكبر الأحداث. أيه أفكار؟

هل كانت مفيدة؟

المحلول

أعلم أنه قد يبدو غريبا ولكن الحل هو تغيير الخط:

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

مع:

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

عليك أن ترى ذلك في الاتجاه الآخر من أجل فهم سبب ذلك ضروري وليس واضحا في البداية.

أنت تطلب كائنات شخص (Personalias) التي تحتوي على نفس صديق "الأصدقاء" (الأصدقاء) مع معرف == شخص .ID (.add (p => p.id == person.id) لذلك تحتاج إلى فرز حسب personalias.latestlogin وليس friendalias.latestlogin.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top