2011-03-17 51 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); 
}