IQueryable WebAPI服务:为什么我需要调用.ToList()

本文关键字:调用 ToList WebAPI 服务 为什么 IQueryable | 更新日期: 2023-09-27 18:24:18

我从上周离职的一位开发人员那里继承了这段代码。他的代码基于以下文章:
"Restful WCF/EF POCO/UnitOfWork/Repository/MEF"。

此方法有效(当我浏览到http://myapp/myservice/Returns):

[WebGet(UriTemplate = "Returns")]
public IQueryable<ReturnSnapshot> GetReturnSnapshots()
{
    using (UnitOfWork)
    {
        ReturnSnapshotsRepository.EnrolInUnitOfWork(UnitOfWork);
        return ReturnSnapshotsRepository.FindAll().ToList().AsQueryable();
    }
}

但是ToList()不会导致整个表从存储库中被拉出来吗?我们将有50万行以上的生产。

我想我可以把最后一行改成这样:

return ReturnSnapshotsRepository.FindAll();

因为CCD_ 2返回IQueryable。然而,我的更改破坏了服务,现在服务因HTTP12152错误而崩溃。

我该怎么办?

IQueryable WebAPI服务:为什么我需要调用.ToList()

您应该能够从WCF Web API REST服务返回IQueryable<T>。我怀疑using块导致了您的问题,因为UnitOfWork在您从该方法返回后立即被处理,但在实际数据库查询可以执行之前。添加ToList()解决了这个问题,但正如您所指出的,它是通过先将所有内容加载到内存中来实现的,所以这并不理想。

我不相信它可以通过WCF公开,这可能解释了

通过WCF服务公开IQueryable