枚举存储过程结果 - 不能多次枚举查询结果

dra*_*fly 3 linq linq-to-entities entity-framework entity-framework-4

我正在调用存储过程:

ObjectResult<ComplexType1> result = context.ListSomething(model.SelectedDatabase);
ViewBag.WebGrid = new WebGrid(source: result, rowsPerPage: int.MaxValue, canSort: false, canPage: false);
Run Code Online (Sandbox Code Playgroud)

但是,当将结果作为源传递给WebGrid时,我收到:

System.InvalidOperationException:不能多次枚举查询结果。

我有点惊讶,因为ObjectResult实现了IEnumerable(不是IQueryable)。该异常背后的背景是什么以及为什么我必须调用ToList()方法:

var result = context.ListSomething(model.SelectedDatabase).ToList();
ViewBag.WebGrid = new WebGrid(source: result, rowsPerPage: int.MaxValue, canSort: false, canPage: false);
Run Code Online (Sandbox Code Playgroud)

让它发挥作用?您能否为我提供一些解释它的文档(例如,来自《编程实体框架,第二版》,正如我现在正在阅读的那样,但到目前为止我不记得任何可以解释该机制的内容)。

谢谢,帕维尔

Lad*_*nka 5

这是因为ObjectResult<T>内部访问DataReader只允许以仅前向方式枚举结果一次,因此如果您想再次迭代结果而不ToList先调用,则必须再次执行存储过程并获取新ObjectResult<T>实例。