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)

您必须以相反的方式看待它,才能理解为什么这是必要的,并且在开始时并不明显。

您正在请求具有相同“父”朋友 (friendAlias) 且 ID == person.ID (.Add(p => p.ID == person.ID)) 的 Person 对象 (personAlias),因此您需要按personAlias.LatestLogin 而不是friendAlias.LatestLogin。

于 2009-11-11T10:44:27.053 回答