【问题标题】:The result of a query cannot be enumerated more than once.查询的结果不能多​​次枚举。
【发布时间】:2017-02-22 18:46:14
【问题描述】:

我有一个列表视图对话框来将数据绑定到该列表视图。

private void BindListView(string DCLookupMstr_Value, int reportCatId, string DCLookup_Value = null)

    {          

         using (Model.OperationalAnalyticsEntities oadb = new Model.OperationalAnalyticsEntities())
            {
                var res = oadb.prGetDailyCensusLookup(DCLookupMstr_Value, reportCatId, DCLookup_Value);
                Session["LookupValues"] = res;
                lvLookup.DataSource = res.ToList();
                lvLookup.DataBind();
            }            
    }

我在该列表视图对话框上放置了一个搜索框(文本框)。如果用户键入任何文本/字符,请使用 linq 查询。使用包含给定字符的值再次填充列表视图。我的代码如下

protected void txtSearch_TextChanged(object sender, EventArgs e)
    {
        var text = txtSearch.Text;
        //var list = new List<Model.prGetDailyCensusLookup_Result>();
        var lookUpValue = Session["LookupValues"] as ObjectResult<Model.prGetDailyCensusLookup_Result>;
        var list = lookUpValue.Where(x => x.DCLookup_Value.Contains(text));

        lvLookup.DataSource = list.ToList();
        lvLookup.DataBind();  
     }

我在添加 .ToList() 的地方得到“不能多次枚举查询的结果”。我不确定我错过了什么。

请帮忙!

【问题讨论】:

  • 错误信息是不言自明的。您试图多次获取查询结果。你不能那样做。那你不明白怎么办?您还尝试执行基于已处置数据源的查询,因此这也可能会给您带来问题。

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


【解决方案1】:

BindListView 中,当您执行.ToList() 时,它会第一次枚举查询。您在会话中存储的是查询本身。当您在txtSearch_TextChanged 中再次执行.ToList() 时,它会再次枚举查询,这是不支持的。

您应该将.ToList() 的结果存储在会话中,而不是查询中:

Session["LookupValues"] = lvLookup.DataSource = res.ToList();

【讨论】:

    【解决方案2】:

    您存储在 Session 中的值是 LINQ 查询,而不是查询的结果。第二次使用它(list.ToList())会抛出这个错误。

    这很容易通过将结果存储为Session 中的列表来解决。

    var res = oadb.prGetDailyCensusLookup(DCLookupMstr_Value, reportCatId, DCLookup_Value)
                  .ToList();
    Session["LookupValues"] = res;
    lvLookup.DataSource = res;
    lvLookup.DataBind();
    

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多