何时使用 IQueryable 作为 Web 服务中的 Return 类型

When to use IQueryable as Return type in web service

如果将 return 定义为 IQueryable,那么我的 ajax 调用有时会失败。

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

我收到 500 Internal Server Error 并且也无法调试;

XML Parsing Error: no element found Location: moz-nullprincipal:{4acaf0ef-4230-404d-ae26-304916e1c044} Line Number 1, Column 1:

所以当我使用 return 类型 List<Banner> 时,它完美无误。

如果您的控制器 returns OData 格式,returns IQueryable 操作的响应主体将包含更多信息,例如下一页数据、odata 元数据。 IQueryable 支持进一步过滤、分页,但不支持通过索引器进行随机访问。列表支持通过索引器进行随机访问,不支持进一步过滤。在你的情况下,如果你只需要客户端的数据,那么 return List 或 IEnumerable.

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

我还建议您在使用浏览器开发工具使用 IQueryable 和 List 时跟踪从服务器返回的内容,或者 Fiddler

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

IQueryable, IEnumerable or List

Implement Efficient Data Paging

To return IQueryable or not return IQueryable