【问题标题】:Enumerating stored procedure result - The result of a query cannot be enumerated more than once枚举存储过程结果 - 不能多次枚举查询的结果
【发布时间】:2011-12-21 12:34:48
【问题描述】:

我正在调用存储过程:

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

但是,当将 result 作为源传递给 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,因为我现在正在阅读它,但到目前为止我不记得有任何可以解释该机制的东西)。

谢谢, 帕维尔

【问题讨论】:

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


    【解决方案1】:

    这是因为ObjectResult&lt;T&gt; 在内部访问DataReader,它只允许以仅向前的方式枚举结果一次,所以如果你想再次迭代结果而不调用ToList,首先你必须再次执行存储过程并获取新的@987654324 @实例。

    【讨论】:

    • 啊,我想我记得类似的例子,延迟加载设置为 false,当类型 T 对象在循环时物化时......谢谢提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多