2011-03-17 52 views
2
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;

回答

6

疯狂地使用枚举器是一个糟糕的主意 - 例如,它需要处置 - 您还没有完成(这可能导致SqlDataReader被打开 - 不好)。在这种情况下,只是列举它。如果没有任何记录,这将是微不足道的:

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

如果需要数据两次,把它放在一个列表:

var news = (blah).ToList(); 
+0

上把结果放到列表大点。 – Mike 2012-08-29 16:40:44

1

代码的第二行更改为

var news= dc.GetNewsCompany(Int64.Parse (_idCompany)).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); 
}