我正在尝试使用nhibernate在我的导航中实现第一个和最后一个。点击第一个我能够使用给定的函数找到第一行
public IList<T> GetFirstItem<T>()
{
using (ISession session = MvcApplication.SessionFactory.GetCurrentSession())
{
using (session.BeginTransaction())
{
return session.CreateCriteria(typeof(T)).SetFirstResult(0)
.SetMaxResults(1)
.List<T>();
}
}
}
但我无法实现最后一个按钮。我不想使用两个查询。是否可以在单个Nhibernate查询中找到最后一项?
答案 0 :(得分:1)
我认为您可能希望使用某种排序来确定第一个和最后一个项目,因此您可以使用排序ASC来获取第一个并使用DESC来获取最后一个添加排序到当前代码。
答案 1 :(得分:1)
GetFirstItem()
的实施并不能保证返回第一项,因为选择查询可能会以任何顺序返回项目。所以你在随机列表中得到第一个结果。
要使您的方法正常工作,您需要在.AddOrder(Order.Asc("<some property>"))
可能是数据库ID或创建时间戳的条件中添加<some property>
调用。
要获取最后一项,请改为添加.AddOrder(Order.Desc("<some property>"))
来电。
(顺便说一句,为什么你从一个只能得到一个项目的方法中返回一个列表?)