我在一个表中有 10,000 个项目,在客户端每页显示 20 个项目(可以额外过滤项目)
我需要在所有元素中找到项目。然后我需要获取页码,元素所在的位置并转到客户端上的该页面并选择它
我之前的问题是 Get item index (rownum) .
但是我没有得到任何答复。
可能还有另一种方法可以在不获取所有表格数据的情况下找到项目所在的页码?
我正在使用 Linq to Nhibernate,数据库 - Oracle。
编辑:感谢您的回复,但这并不容易
例子:
在表数据库中,我有
ID NAME
1 Item1
2
3
4
5
20
31
..... ....
5000
在客户端,我过滤数据
query = query.Where(...).Where(...).Where(...).OrderBy(...)
得到结果
ID ROW_NUM_IN_QUERY
4 1
300 2
2 3
31 4
..... ....
402 50
800 51
我无法链接到字段 ID
或查询中的其他字段,因为它们的顺序可能不同
我可以通过简单的 SQL 获得 rownum。但是 Linq to NHibernate 做不到。如果不完全从表中获取数据,它就无法像 IndexOf
或 RowNumber
那样工作。
这个变体:
var indexed = myDataSource.Select( (x,n) => new { Value = x, RowNumber = n } );
Not suported exception during execute query
最佳答案
首先,如果您不提供任何排序,那么索引的整个概念就毫无意义。接下来,没有简单、容易的方法来获得你想要的东西;它需要在某种程度上取决于特定的查询。
比方说,如果您要根据创建日期对数据进行排序,您可以这样做:
var someItem = queryToFetchIndividualItem;
var indexOfItem = table.OrderBy(item => item.CreatedDate)
//any other filtering provided on your query goes here, i.e. other where statements
.Where(item => item.CreateDate < someItem.CreatedDate)
.Count()
如果你按“标题”排序,那么你可以这样做:
var indexOfItem = table.OrderBy(item => item.Title)
//any other filtering provided on your query goes here, i.e. other where statements
.Where(item => item.Title < someItem.Title)
.Count()
我假设您在这里看到了模式。如果我们获得查询中感兴趣项目之前的项目计数,我们将获得索引。数据库可以针对我们只对计数感兴趣的事实优化查询。
关于c# - 获取元素页码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10285529/