我正在调用存储过程:
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
答案 0 :(得分:4)
这是因为ObjectResult<T>
在内部访问DataReader
,它允许仅以前向方式枚举结果一次,因此如果要在不先调用ToList
的情况下再次迭代结果,则必须先执行存储过程再次获得新的ObjectResult<T>
实例。