C#LINQ SPROC从页码获取结果

时间:2012-12-05 17:49:47

标签: c# linq asp.net-mvc-2

我在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。

有办法做到这一点吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

嗯,它的效率会有问题,但它似乎是您查询和恢复所有结果的要求的一部分。从那里你可以使用LINQ中的Skip()和Take()扩展方法来获得你想要的东西:

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

编辑:我忘了你必须先订购,然后才能跳过或拿走。只需替换有序字段即可。

答案 1 :(得分:0)

See this thread.

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