C# ASP.NET OData v3与Excel 2013:是否忽略分页?
我正在尝试将OData Web Api与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
- 具有约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)]