【发布时间】:2009-12-15 16:52:25
【问题描述】:
我使用 jqGrid 来显示使用 NHibernate 检索的数据。 jqGrid 为我分页,我只是告诉 NHibernate 从“n”开始获取“count”行。
另外,我想强调一下具体的记录。例如,在员工列表中,我希望在表格中显示并预先选择特定员工 (id)。
问题是该员工可能不在当前页面上。例如。我从 0 开始显示 20 行,但“突出显示”的员工是 #25 并且在第二页上。
可以将初始页面传递给 jqGrid,因此,如果我以某种方式使用 NHibernate 来查找“突出显示”员工所在的页面,它只会导航到该页面,然后我将使用 .setSelection(id) jqGrid的方法。
所以,问题被缩小到这个问题:给定如下的特定搜索查询,我如何告诉 NHibernate 计算“突出显示”员工所在的页面?
示例查询(简化):
var query = Session.CreateCriteria<T>();
foreach (var sr in request.SearchFields)
query = query.Add(Expression.Like(sr.Key, "%" + sr.Value + "%"));
query.SetFirstResult((request.Page - 1) * request.Rows)
query.SetMaxResults(request.Rows)
在这里,我需要更改(计算)request.Page,使其指向 request.SelectedId 所在的页面。
另外,一件有趣的事情是,如果没有定义排序顺序,当我运行两次搜索查询时会得到相同的结果吗?我会说 SQL Server 可能优化查询,因为没有定义顺序......在这种情况下,如果我拉 ALL 查询数据 once,然后将以编程方式在 C# 中对查询结果的指定部分进行切片 - 这样就不会发生第二次查询。但当然会慢得多。
或者,还有其他方法吗?
【问题讨论】:
标签: nhibernate jqgrid