LINQ:在1 IQueryable中返回2个SELECT进行分页?与存储库模式保持一致,不更改返回类型

Mar*_*tin 2 c# linq iqueryable repository-pattern linq-to-sql

是否有可能返回1个Iqueryable选择?

我有一个方法基本上返回一些记录,但我用它来分页,所以我还需要返回TOTAL记录的数量.它工作,但不是创建一个具有2个属性的具体类(1为计数,1为我的选择)我宁愿坚持IQueryable但我不确定它是否会起作用.

以下是我的COUNT返回的示例:

 56
Run Code Online (Sandbox Code Playgroud)

这是指表中的记录金额.

然后我的选择返回一个页面,每页有多个记录,即

ID      Name
32      John
33      Peter
34      David
Run Code Online (Sandbox Code Playgroud)

所以你可以看到我实际上有2个选择 - 1表示返回表中的记录数量,1表示从表中返回记录子集.当然我在我的方法(C#)中执行这两个值作为2个单独的查询,所以我有2个iqueryable vars生效,我需要从方法返回两个.

所以我想让我的返回方法符合存储库模式的标准,即返回IQueryable - 但是我该怎么做呢?

我不想创建2个方法,1个用于返回计数,另一个用于返回子集,正如我所说,我不想将返回类型更改为具有2个属性(称为Count)的具体类(例如)和数据.

Mar*_*ell 5

不,基本上.LINQ-to-SQL 本身支持多个网格,但通常在调用存储过程时,而不是通过IQueryable<T>.而且由于您不想更改架构,因此无法使用ExecuteQuery<T>虚拟列的厚颜无耻.所以不行.

但是,您可以执行以下操作(当然要求2次往返服务器):

public static IQueryable<T> GetPage(this IQueryable<T> query,
    int skip, int take, out int count)
{
    count = query.Count();
    return query.Skip(skip).Take(take);
}
Run Code Online (Sandbox Code Playgroud)