nhibernate分页查询以获取下一组结果
本文关键字:一组 结果 分页 查询 获取 nhibernate | 更新日期: 2023-09-27 18:25:16
这是我试图解决的问题,我想获得nhibernate linq查询,这将使我能够做到这一点。所以我有一个名为organization的表,它有Name和id。假设这个有10。
- id=1 Name="D"
- id=2 Name="B"
- id=3 name="C"
- id=4 name="E"
- id=5 name="F"
- id=6 name="G"
- id=7 name="h"
- id=8 name="i"
- id=9 name="j"
- id=10 name="k"
我想按如下方式对组织进行分页。
第一次使用时,我传入索引0和pageSize=2以及orderby="name",因此这将返回带有**[id=2,name=B]和[id=3 name=C]的组织这很简单现在第二次,我想得到下一组2个组织,它们在字母表中的第二个元素之后,所以在这种情况下,我希望得到id=1和id=4的组织,所以我传入index=1,pagesize=2和LastElementId=3。你能帮我查询id为1和4的组织吗?出于性能原因,我想避免必须获取所有10个元素,并在这些元素上执行foreach等操作。
不确定index
变量的用途,但您似乎在寻找如下所示的SQL:
select
top (2) *
from
[MyEntity]
order by
[MyEntity].[Name] asc
(针对第一个查询)
以及这个,用于后续查询:
select
top (2) *
from
[MyEntity]
where
[MyEntity].[Name] > (
select [LastEntity].[Name]
from [MyEntity] as [LastEntity]
where [LastEntity].[Id] = 3 --LastElementId
)
order by
[MyEntity].[Name] asc
使用QueryOver,可以这样写:
public IList<MyEntity> PerformQuery(
ISession session,
int pageSize,
int? lastElementId)
{
var query = session.QueryOver<MyEntity>();
if (lastElementId.HasValue)
{
query.Where(
Restrictions.GtProperty(
Projections.Property<MyEntity>(e => e.Name),
Projections.SubQuery(
QueryOver.Of<MyEntity>()
.Where(le => le.Id == lastElementId.Value)
.Select(le => le.Name))));
}
return query.OrderBy(e => e.Name).Asc
.Take(pageSize)
.List<MyEntity>();
}
它应该大致如下工作:
int index = 0;
int pageSize = 2;
session.Query<ModelClass>().OrderBy(m => m.Name).Skip(index * pageSize).Take(pageSize);