Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# nhibernate分页查询以获取下一组结果_C#_Nhibernate_Paging - Fatal编程技术网

C# nhibernate分页查询以获取下一组结果

C# nhibernate分页查询以获取下一组结果,c#,nhibernate,paging,C#,Nhibernate,Paging,这就是我试图解决的问题,我想得到nhibernate linq查询,这将允许我能够做到这一点。所以我有一个名为organization的表,它有名称和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” 我想按如下方式对组织进行分页 第一次使用

这就是我试图解决的问题,我想得到nhibernate linq查询,这将允许我能够做到这一点。所以我有一个名为organization的表,它有名称和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”
  • 我想按如下方式对组织进行分页

    第一次使用I传入索引0和pageSize=2以及orderby=“name”因此这将返回带有**[id=2,name=B]和[id=3 name=C]的orgs这很简单。
    现在第二轮我想得到下一组2个组织,它们位于字母表中的第二个元素之后,所以在本例中,我希望得到id=1和id=4的组织,所以我传入index=1、pagesize=2和LastElementId=3。你能帮我查询一下id为1和4的Org吗?出于性能原因,我希望不必获取所有10个元素并在这些元素上执行foreach等操作。

    它的工作原理大致如下:

    int index = 0;
    int pageSize = 2;
    session.Query<ModelClass>().OrderBy(m => m.Name).Skip(index * pageSize).Take(pageSize);
    
    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索引=0;
    int pageSize=2;
    session.Query().OrderBy(m=>m.Name).Skip(索引*页面大小).Take(页面大小);
    
    不确定
    索引
    变量的用途,但您似乎正在寻找如下所示的SQL:

    int index = 0;
    int pageSize = 2;
    session.Query<ModelClass>().OrderBy(m => m.Name).Skip(index * pageSize).Take(pageSize);
    
    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>();
    }
    
    选择
    顶部(2)*
    从…起
    [我的实体]
    订购人
    [MyEntity][Name]asc
    
    (对于第一个查询)

    对于后续查询:

    选择
    顶部(2)*
    从…起
    [我的实体]
    哪里
    [MyEntity].[Name]>(
    选择[LastEntity]。[Name]
    来自[MyEntity]作为[LastEntity]
    其中[LastEntity].[Id]=3--LastElementId
    )
    订购人
    [MyEntity][Name]asc
    
    使用QueryOver,可以这样写:

    int index = 0;
    int pageSize = 2;
    session.Query<ModelClass>().OrderBy(m => m.Name).Skip(index * pageSize).Take(pageSize);
    
    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>();
    }
    
    公共IList性能查询(
    会议期间,
    int pageSize,
    int?lastElementId)
    {
    var query=session.QueryOver();
    if(lastElementId.HasValue)
    {
    查询,在哪里(
    限制.GtProperty(
    Projections.Property(e=>e.Name),
    子查询(
    (的)查询
    .Where(le=>le.Id==lastElementId.Value)
    .Select(le=>le.Name));
    }
    返回query.OrderBy(e=>e.Name).Asc
    .Take(页面大小)
    .List();
    }
    
    谢谢你的回复,德克,这很有效,但这正是我要确保在organization name=“c”之后选择下两个元素的部分。可能在第一次查询之后插入了其他组织,因此跳过不会真正删除它如果您担心其他元素会添加到列表中,那么您需要对所有元素运行查询,并将它们放在缓存中的某个位置,然后对缓存的版本运行相同的查询,不是实时数据库。谢谢安德鲁,这正是我要找的。