Результаты запроса перечисляются более одного раза - PullRequest
2 голосов
/ 17 марта 2011
    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);
           } 
       }

return error: {"Результаты запроса не могут быть перечислены более одного раза."}

как проверить результат! = Ноль в LINQ;

Ответы [ 3 ]

6 голосов
/ 17 марта 2011

Использование перечислителя дико - плохая идея - например, он требует удаления - что вы еще не сделали (это может привести к тому, что SqlDataReader останется открытым - не хорошо). В этом случае просто перечислите его . Если нет никаких записей, это будет тривиально:

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

Если вам нужно данные дважды, поместите их в список:

   var news = (blah).ToList();
2 голосов
/ 17 марта 2011

Вы создаете перечислитель дважды.Первый вызов по номеру 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);
} 
1 голос
/ 17 марта 2011

Измените вторую строку вашего кода на

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

это устранит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...