2015-09-18 57 views
1

如果定义的返回类型为IQueryable那么我的ajax调用会失败一段时间。何时在Web服务中使用IQueryable作为返回类型

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

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

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

所以,当我使用的返回类型List<Banner>它可以完美运行而不会出现错误。

回答

1

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

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

我也建议你跟踪你从服务器找回什么,当你使用的IQueryable和列表使用浏览器的开发工具,或Fiddler

您可以在这里找到更多的信息:

IQueryable, IEnumerable or List

Implement Efficient Data Paging

To return IQueryable or not return IQueryable

+0

Ť为我们的宝贵时间。是的,我正在使用OData格式。我想通过ID基础过滤记录后,我点击过滤器显示失败错误代码500.我无法错误跟踪它。 –

+0

经过长时间的努力发现问题,我没有设置复制本地真正的Microsoft.Data.OData.dll,所以它显示错误的实时应用程序。 –

相关问题