我一直在处理一个关于.NET Web API和IQueryable的问题。我在我的.NET Web API应用程序中的一个简单控制器中通过依赖注入注入了一个工作单元对象。据我所知,可能会在控制器中返回一个IQueryable,或者您可以返回一个List,这两种情况都使用例如.Ok()
和IHttpActionResult作为返回类型。
我怀疑的是,例如,将IQueryable作为it's done in the default GET method返回或使用await调用.ToListAsync()
之间的区别。如果我没有错的话,Web API无论如何都会具体化结果,但为了能够具体化它,数据必须加载到内存中,因此需要执行.ToList()
或.ToListAsync()
。它如何选择使用哪种方法或途径来示例化内存中的数据?
public IQueryable<MyModel> GetMyModel()
{
return db.MyModel;
}
这将是IQueryable方法的一个示例。
public async Task<IHttpActionResult> GetMyModel()
{
return Ok(await db.MyModel.ToListAsync());
}
这将是.ToListAsync/ToList方法的示例。
谢谢😀
1条答案
按热度按时间bis0qfac1#
当执行IQueryable时,结果集在物化时被视为IEnumerable。理论上,这是在发送和释放之前将数据库中的每条记录加载到内存中。通过调用.ToList()或.ToListAsync()。它说:将我的所有结果加载到一个大的内存对象中,然后返回该对象。
这并不可怕,但你过早地实现了集合,并将其完整地存入内存。