2015-06-19 85 views
2

我是OData的新手,我有一个关于在我的.NET Web API中使用它的问题。在我的Web API,如果我有以下的Get方法控制器:OData&.NET Web API

[EnableQuery()] 
public IQueryable<Product> Get() 
{ 
    var productRepository = new ProductRepository(); 

    return productRepository.Retrieve().AsQueryable(); 
} 

是否有必要为我所应用的OData的查询选项之前检索所有的产品还是有办法,我只能用检索产品OData查询选项?

我不希望必须检索所有可能超过100,000的产品,然后根据我的标准应用OData查询选项才能返回10条记录。

感谢您对此问题的任何帮助。

回答

0

恶意或天真的客户端可能能够构建一个查询,该查询需要很长时间才能执行。在最坏的情况下,这可能会中断 访问您的服务。

[Queryable]属性是一个操作筛选器,它解析,验证 并应用查询。该筛选器将查询选项转换为LINQ表达式 。当OData控制器返回IQueryable类型时,IQueryable LINQ提供程序将LINQ表达式转换为 查询。因此,性能取决于使用的LINQ提供程序,即 ,也取决于数据集或 数据库架构的特定特征。

如果您知道所有客户端都是可信的(例如,在 企业环境中),或者如果数据集很小,则查询 性能可能不成问题。否则,you should consider the following recommendations

我你的情况,你会感兴趣的:

// Enable server-driven paging. 
[Queryable(PageSize=10)]