使用LINQ to NHibernate将LINQ IQueryable转换为分页IQueryable

使用LINQ to NHibernate将LINQ IQueryable转换为分页IQueryable,linq,nhibernate,paging,expression,Linq,Nhibernate,Paging,Expression,我想做那样的事 public IQueryable GetPaged<TSource>(IQueryable<TSource> query, int startIndex, int pageSize) { return GetSession() .Linq<TSource>() .UseQuery(query) .Take(pageSize) .Sk

我想做那样的事

    public IQueryable GetPaged<TSource>(IQueryable<TSource> query, int startIndex, int pageSize)
    {
        return GetSession()
          .Linq<TSource>()
          .UseQuery(query)
          .Take(pageSize)
          .Skip(startIndex);
    }
public IQueryable GetPaged(IQueryable查询、int startIndex、int pageSize)
{
返回GetSession()
林奇议员()
.UseQuery(查询)
.Take(页面大小)
.Skip(startIndex);
}
因此,您可以将任何可执行语句放入“它变为分页”或将被分页

我正在使用LINQ进行NHibernate。 我希望你能明白这句糟糕的英语:哦


编辑:也许我的方法是错误的,是吗?

这是从工作代码复制的:

return query.skip(startIndex).take(pageSize);
public static class QueryableExtensions
{   
    public static IQueryable<T> Paged<T>(this IQueryable<T> source, int page,
                                                                    int pageSize)
    {
        return source
          .Skip((page - 1) * pageSize)
          .Take(pageSize);
    }
}
公共静态类QueryableExtensions
{   
公共静态IQueryable页面(此IQueryable源,int页面,
内部页面大小)
{
返回源
.Skip((第1页)*页面大小)
。取(页面大小);
}
}

问题是我使用LINQ来实现NHibernate和GetSession()。LINQ()的类型为IQueryable/IQueryable,因此这对mesry没有帮助,这不是我想要的。我想创建一个可读取的对象。这个对象将被传递到方法GetAllPaged(IQuerable QueryAtshallPaged,int pageSize,int startIndex)中,重命名变量名,你就有了你所说的。你的解决方案由客户端使用,客户端不必把查询放在方法中,因为Linq扩展方法。我想为我的存储库提供一个解决方案。是的,你的解决方案是有效的,但这并不是我想要的。我不想要这个。。。我想要这个。。。页面(查询、页面、大小)。但我不确定哪种解决方案更好。我在存储库中使用我的解决方案。我不明白你的意思。C#对您来说是一种新语言吗?上面的代码示例无法为我编译,因为T是未知的。我不得不把它改成Paged(。。。