查询的结果不能多​​次枚举

时间:2011-04-19 22:35:55

标签: c# asp.net linq entity-framework entity-framework-4

我正在使用实体框架(ef)并收到以下错误:

  

“查询的结果不能多​​次枚举。”。

我有一个包含ef数据上下文的存储库类。然后我有一个控制器类(不要与MVC控制器混淆),它包含一个存储库实例。到目前为止一切都很好......我在控制器上有一个搜索方法,它应该返回一个RadComboBoxItemData数组,用于填充Telerik RadComboBox控件。

public RadComboBoxItemData[] Search(int id, string searchText)
{
    var query = context.Search(id, searchText);
    List<RadComboBoxItemData> result = new List<RadComboBoxItemData>();
    foreach (var item in query)
    {
        RadComboBoxItemData itemData = new RadComboBoxItemData();
        itemData.Text = ""; // assign some text here..;
        itemData.Value = ""; /*assign some value here..*/
        result.Add(itemData);
    }

    return result.ToArray();
}

当我调试我的代码时,我可以进入foreach循环,但后来我收到错误说:

  

类型的例外   'System.InvalidOperationException'   发生在System.Data.Entity.dll但是   未在用户代码中处理

     

附加信息:结果   查询不能被枚举多于   一次。

我的实体使用现有存储过程的函数导入。

// EF repository method calling the function imported method on the data context.
public IEnumerable<SearchItem> Search(int id, string searchText)
{
    return this.entityContext.Search(id, searchText);
}

函数import Search调用存储的precedure来返回SearchItem的集合。

我感觉foreach循环因为ef的某些东西而无法迭代。

3 个答案:

答案 0 :(得分:135)

尝试通过调用ToList()明确枚举结果。

更改

foreach (var item in query)

foreach (var item in query.ToList())

答案 1 :(得分:6)

尝试替换此

var query = context.Search(id, searchText);

var query = context.Search(id, searchText).tolist();

一切都会顺利进行。

答案 2 :(得分:-5)

如果你遇到这种类型的错误,所以我建议你像往常一样存储proc数据然后绑定其他控件因为我也得到这个错误所以我解决了这个问题 例如: -

repeater.DataSource = data.SPBinsReport().Tolist();
repeater.DataBind();

试试这个