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

标签 c# linq linq-to-sql repository-pattern iqueryable

是否可以使用 1 个 Iqueryable 返回 2 个选择?

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

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

 56

这是指表中的金额记录。

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

ID      Name
32      John
33      Peter
34      David
正如您所看到的,我实际上有 2 个选择 - 1 个返回表中的记录数量,1 个返回表中的记录子集。当然,我在方法 (C#) 中将这两个值作为 2 个单独的查询执行,因此我有 2 个有效的 iqueryable 变量,并且我需要从方法中返回这两个值。

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

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

最佳答案

不,基本上。 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);
}

关于c# - LINQ:在 1 个 IQueryable 中返回 2 个 SELECT 进行分页?与存储库模式保持一致并且不更改返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4284439/

相关文章:

c# - 从 MemberExpression 和 Constant 创建 Func<T, bool>

c# - 将许多文本文件读入 SQL Server Express

c# - Where 方法如何运行?

c# - 如何使用 LINQ to SQL 类的 PropertyChangedEventHandler 进行即时更新?

database - linq执行命令

c# - 何时在 Sqlite.Net 类上使用 Index 属性?

c# - 为什么backgroundworker取消按钮没有取消backgroundworker操作?

c# - 如何从 C# 中的文件名中删除目录字符串

c# - Linq 从对象属性列表中获取新列表,该对象属性列表本身就是一个列表

c# - 更新记录 Linq-to-SQL