枚举存储过程结果 - 无法多次枚举查询结果

时间:2011-12-21 12:34:49

标签: linq entity-framework entity-framework-4 linq-to-entities

我正在调用存储过程:

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

但是,当 结果 作为 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);

让它起作用?您是否可以向我提供一些解释它的文档(例如来自Programming Entity Framework, 2nd Edition,因为我现在正在阅读它,但我记不起任何可以解释该机制的内容)。

谢谢, 的Pawel

1 个答案:

答案 0 :(得分:4)

这是因为ObjectResult<T>在内部访问DataReader,它允许仅以前向方式枚举结果一次,因此如果要在不先调用ToList的情况下再次迭代结果,则必须先执行存储过程再次获得新的ObjectResult<T>实例。