【问题标题】:The query results enumerated more than once查询结果列举了不止一次
【发布时间】:2011-03-17 09:28:21
【问题描述】:
    datacontextclass dc=new datacontextclass ();
       var news= dc.GetNewsCompany(Int64.Parse ( _idCompany));
       if (news.GetEnumerator().MoveNext())
       {
           foreach (var item in news)
           {
               drpListNews.Items.Add(item.Title);
           } 
       }

返回错误:{“查询结果不能枚举多次。”}

如何在 LINQ 中检查结果!= null;

【问题讨论】:

    标签: c# asp.net linq linq-to-sql


    【解决方案1】:

    过度使用枚举器是个坏主意 - 例如,它需要处理 - 您还没有这样做(这可能导致 SqlDataReader 保持打开状态 - 不好)。在这种情况下,只需枚举它。如果没有任何记录,那将是微不足道的:

       if (news!=null)
       {
           foreach (var item in news)
           {
               drpListNews.Items.Add(item.Title);
           } 
       }
    

    如果您需要两次数据,请将其放入列表中:

       var news = (blah).ToList();
    

    【讨论】:

      【解决方案2】:

      您正在创建枚举器两次。第一个是调用news.GetEnumerator(),第二个发生在foreach 循环的幕后。调用MoveNext 时进行的第一次“检查”似乎没有必要(除非有要迭代的项目,否则您不会进入foreach),因此只需跳过包裹循环的if 语句:

      datacontextclass dc = new datacontextclass();
      var news = dc.GetNewsCompany(Int64.Parse(_idCompany));
      foreach (var item in news)
      {
          drpListNews.Items.Add(item.Title);
      } 
      

      【讨论】:

        【解决方案3】:

        将代码的第二行更改为

            var news= dc.GetNewsCompany(Int64.Parse ( _idCompany)).toList();
        

        它将消除问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多