查询结果不止一次枚举

时间:2011-03-17 09:28:21

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

    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;

3 个答案:

答案 0 :(得分:6)

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

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

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

   var news = (blah).ToList();

答案 1 :(得分:2)

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

if

答案 2 :(得分:1)

将代码的第二行更改为

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

它将删除该问题。