C# ASP.NET OData v3与Excel 2013:是否忽略分页?

C# ASP.NET OData v3与Excel 2013:是否忽略分页?,c#,asp.net,excel,asp.net-web-api,odata,C#,Asp.net,Excel,Asp.net Web Api,Odata,我正在尝试将OData Web Api与Excel 2013集成,但遇到了一些问题 情景: 具有约4000万行的大型数据库视图(MySQL) 数据库第一个EDMX(实体框架6.1.0) 向客户端提供数据的EntitySetController.Get()(WebApi 2.1) Excel 2013使用OData提要 我的服务器端代码必须考虑到隐藏的大量数据,因此我用[Queryable(PageSize=50)] 在浏览器中检查($skip=4999有效,$skip=5000有效,$ski

我正在尝试将OData Web Api与Excel 2013集成,但遇到了一些问题

情景:

  • 具有约4000万行的大型数据库视图(MySQL)
  • 数据库第一个EDMX(实体框架6.1.0)
  • 向客户端提供数据的EntitySetController.Get()(WebApi 2.1)
  • Excel 2013使用OData提要
我的服务器端代码必须考虑到隐藏的大量数据,因此我用
[Queryable(PageSize=50)]

在浏览器中检查(
$skip=4999
有效,
$skip=5000
有效,
$skip=5001
给出错误)后,我再次尝试在excel中下载数据

不幸的是,Excel在5000处停止,显示服务器错误,并且不显示任何数据


如何使其工作?

是的,从OData服务获取数据时,Excel将忽略分页。
由于您将MaxSkip设置为5000,当excel尝试获取第5001条记录时,它将失败。那么你期望的行为是什么?如果要控制返回量,可以在查询中组合$skip和$top,并在服务中设置MaxSkip和MaxTop以控制最大值。

如何在Excel中组合$top和$skip?如果我从web浏览器获取数据,我可以轻松地将这些参数添加到URL,但Excel不允许我这样做。您是否使用Excel中的“数据”选项卡?请尝试使用可在web浏览器中使用的Url在excel中指定OData源的位置
public class SerieValuesController : EntitySetController<SerieValue, int>
{
    #region DB Property
    private EDMWarehouseViewsContainer _DB = null;
    public EDMWarehouseViewsContainer DB
    {
        get
        {
            if (_DB == null)
                _DB = new EDMWarehouseViewsContainer();
            return _DB;
        }
    }
    #endregion

    [Queryable(PageSize=50)]
    public override IQueryable<SerieValue> Get()
    {
        var options = this.QueryOptions;
        IQueryable results = DB.SerieValues;

        if (options.Filter != null)
        {
            results = options.Filter.ApplyTo(results, new ODataQuerySettings());
        }

        if (options.Top != null)
        {
            results = options.Top.ApplyTo(results, new ODataQuerySettings());
        }

        return results as IQueryable<SerieValue>;
    }

    protected override SerieValue GetEntityByKey(int id)
    {
        SerieValue entity = DB.SerieValues.Find(id);
        return entity;
    } 
}
[Queryable(PageSize=50, MaxSkip=5000)]