簡體   English   中英

查詢結果不止一次枚舉

[英]The query results enumerated more than once

    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;

瘋狂地使用枚舉器是一個壞主意 - 例如,它需要處理 - 你沒有做過(這可能導致SqlDataReader被打開 - 不好)。 在這種情況下, 只需枚舉它 如果沒有任何記錄,那將是微不足道的:

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

如果您需要兩次數據,請將其放在一個列表中:

   var news = (blah).ToList();

您正在創建兩次枚舉器。 第一個是通過調用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);
} 

將代碼的第二行更改為

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

它將刪除該問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM