wcf获取大数据时用linq分页

本文介绍了一种解决WCF服务中大数据量传输问题的方法,通过LINQ的扩展方法实现数据分页,有效地解决了因数据量过大导致的连接异常问题。

     今天想通过wcf获取一个6万多条数据的一个表,本想一次就获取所有数据, 但是运行之后提示错误"The underlying connection was closed: The connection was closed unexpectedly",经过多方查找也没有找到原因,最后感觉应该数据量太大的原因导致的,所以改成一次获取100条记录,然后进行处理,测试之后好用。

    但是接下来存在另一个问题,就是如何才能把所有数据获取过来呢?想了想,可以通过linq实现分页,然后逐步获取数据,直到数据获取完为止。上网查找具体实现,基本上都是通过skip、take方法实现,查到一个实现了扩展方法的代码,感觉不错。具体如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace System.Linq
{
    public static class PageQuery
    {
        public static IQueryable<T> Paginate<T>(
            this IQueryable<T> query, int page, int pageSize)
        {
            int skip = Math.Max(pageSize * (page - 1), 0);
            return query.Skip(skip).Take(pageSize);
        }
    }
}

参考网址:http://weblogs.asp.net/pwelter34/archive/2007/05/31/easier-way-to-page-linq-queries.aspx

通过这个方式获取接近7万条记录数据,时间在一分钟内完成。速度在可接受的范围内。

供自己和大家以后参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值