我有一个实体'人',一个人有一群朋友(也是人物实体)
我希望获得由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订购的。有什么想法吗?
答案 0 :(得分:1)
我知道这可能听起来很奇怪,但解决方法是更改线路:
.AddOrder(() => friendAlias.LatestLogin, Order.Desc)
使用:
.AddOrder(() => personAlias.LatestLogin, Order.Desc)
你必须反过来看它才能理解为什么这是必要的而且在开始时并不明显。
您正在请求具有相同“父亲”朋友(friendAlias)并具有ID == person.ID(.Add(p =&gt; p.ID == person.ID))的Person对象(personAlias)因此您需要按personAlias.LatestLogin而不是friendAlias.LatestLogin排序。