ASP.. NET OData v3 vs . Excel 2013:忽略分页
本文关键字:分页 2013 Excel NET OData v3 vs ASP | 更新日期: 2023-09-27 18:10:07
我正在尝试将OData Web Api与Excel 2013集成,但我面临一些麻烦
场景:
- 拥有~ 4000万行(MySQL)的大数据库视图
- 基于数据库优先的EDMX (Entity Framework 6.1.0)
- EntitySetController.Get()向客户端提供数据(WebApi 2.1)
- Excel 2013使用OData feed
我的服务器端代码必须考虑到背后的巨大数据,所以我用[Queryable(PageSize=50)]
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;
}
}
如果我试图在浏览器中获取数据,使用这些url
http://mymachine。lan/odata/serevalvalues(这将正确获取视图中的前50行,以及oData.nextLink
节点)
http://mymachine.lan/odata/SerieValues?$skip=50(这将正确获得接下来的50行)
当我尝试从Excel 2013中使用此提要时,它开始自动下载数据,逐页下载,直到内存耗尽。
我把[Queryable]
的装饰改成了
[Queryable(PageSize=50, MaxSkip=5000)]
在浏览器中检查后($skip=4999
工作,$skip=5000
工作,$skip=5001
给出错误),我试图在excel中再次下载数据。
不幸的是,Excel停止在5000给出一个服务器错误,没有数据显示。
我怎样才能使它工作?
是的,当从OData服务获取数据时,Excel将忽略分页。由于设置了MaxSkip=5000,因此当excel试图获取第5001条记录时,它将失败。那么你期望的行为是什么?如果你想控制返回的量,你可以在你的查询中组合$skip和$top,并在服务中设置MaxSkip和MaxTop来控制最大值。