0

我在 ASP.NET MVC 应用程序中使用 LINQ TO SQL,我的代码看起来像这样

ISingleResult<proc_get_dataResult> sproc_result = db.proc_get_data();
return sproc_result .AsEnumerable().Cast<proc_get_dataResult>().ToList();

我上面的代码将整个结果集作为列表返回。但是,有问题的查询可能会返回大量数据,因此我想限制正在创建的对象的数量。因此,我现在将页码传递给此方法,例如,如果我传入第 2 页,如果每页常量设置为 25,我只想返回条目 26-50。

有没有办法做到这一点?

提前致谢

4

2 回答 2

1

好吧,它的效率值得怀疑,但它似乎是您查询并带回所有结果的要求的一部分。从那里你可以使用 LINQ 中的 Skip() 和 Take() 扩展方法来获得你想要的:

 return sproc_result.AsEnumerable().Cast<proc_get_dataResult>().ToList().OrderBy(r=>r.WhateverField).Skip(25).Take(25);

编辑:我忘了你必须先订购才能跳过或接受。只需替换任何有序字段。

于 2012-12-05T17:58:48.677 回答
0

看到这个线程。

这不是完全重复的,因为您是在 LINQ 的上下文中询问的。您需要修改存储过程以使用该线程中的一种分页方法。CTE /Row_Number() over...方法是为结果集分配索引的一种非常有效的方法,然后可用于对结果进行排序/分页。

于 2012-12-05T17:54:21.987 回答