何时在Web服务中使用IQueryable作为返回类型

时间:2015-09-18 11:39:41

标签: c# asp.net-mvc api breeze

如果将返回类型定义为IQueryable,那么我的ajax调用会失败一段时间。

        [HttpGet]
    public IQueryable<Banner> GetBannerForExcel()
    {
        return this._banneruow.Repository.GetAll();
    }

我收到500内部服务器错误,也无法调试;

  

XML解析错误:未找到任何元素位置:moz-nullprincipal:{4acaf0ef-4230-404d-ae26-304916e1c044}第1行,第1列:

因此,当我使用返回类型List<Banner>时,它完美无误。

1 个答案:

答案 0 :(得分:1)

如果您的控制器返回OData格式,则返回IQueryable的操作的响应正文将包含更多信息,例如下一页数据,odata元数据。 IQueryable支持进一步过滤,分页,但它不支持通过索引器进行随机访问。 List支持通过索引器进行随机访问,并且不支持进一步过滤。在您的情况下,如果您只需要客户端数据,则返回List或IEnumerable。

IQueryable是数据层(服务器端)的更好选择,因为它推迟了执行。

我还建议您使用浏览器开发工具或Fiddler

来跟踪使用IQueryable和List时从服务器获取的内容

您可以在此处找到更多信息:

IQueryable, IEnumerable or List

Implement Efficient Data Paging

To return IQueryable or not return IQueryable