实体框架IQueryable <t>跳过突然超时

时间:2016-10-25 20:27:21

标签: c# entity-framework visual-studio

我已经有了几个月的以下代码,它一直都很好用:

public PagedResult GetPagedData(int id, Dictionary<string, string> queryStringParameters)
{
    PagedResult pagedReturn = new PagedResult(queryStringParameters);
    IQueryable<MyData> myData = GetMyData(id, queryStringParameters);
    pagedReturn.SetPagesFromTotalItems(myData.Count());

    myData = myData.OrderByDescending(i => i.SomeDate).Skip(pagedReturn.Skip).Take(pagedReturn.PageSize);

    var list = myData.ToList(); // ***TIME OUT HAPPENS HERE***

    List<MyDataListing> listings = this._mapper.Map<List<MyDataListing>>(list);
    pagedReturn.listings = new List<IListing>(listings);

    return pagedReturn;
}

出于一些奇怪的原因,今天我开始在我调用ToList()的行上出现超时错误(见上文)。确切的错误如下:

  

超时已过期。操作完成之前经过的超时时间或服务器没有响应。

pagedReturn.Skip的值为0,pagedReturn.PageSize为500.我通过重新排列代码解决了这个问题:

public PagedResult GetPagedData(int id, Dictionary<string, string> queryStringParameters)
{
    PagedResult pagedReturn = new PagedResult(queryStringParameters);
    IQueryable<MyData> myData = GetMyData(id, queryStringParameters).OrderByDescending(i => i.SomeDate);
    pagedReturn.SetPagesFromTotalItems(myData.Count());

    if (pagedReturn.Skip > 0)
    {
        myData = myData.Skip(pagedReturn.Skip);
    }

    myData = myData.Take(pagedReturn.PageSize);

    var list = myData.ToList();

    List<MyDataListing> listings = this._mapper.Map<List<MyDataListing>>(list);
    pagedReturn.listings = new List<IListing>(listings);

    return pagedReturn;
}

这是什么问题?为什么它今天随机开始计时?该代码几个月来一直没有被触及,就像我上面所说的那样,已经好几个月了。据我所知,数据库中与查询中的表相关的任何内容最近都没有改变。

0 个答案:

没有答案