Как манипулировать результатами из linq

#c# #linq

#c# #linq

Вопрос:

у меня есть выпадающий список для year, проблема в том, что я хочу проверить последний год в списке и добавить 1 . поэтому, если последний год в списке 2011, я вручную добавлю 1, чтобы он также отображал 2012 … вот мой код для вашей справки..

 var b = (from a in sampleworker.getyear()
                 orderby a.Year
                 select new
                 {
                     a.Year
                 }
                 ).Distinct();

        b  = int.Parse( (b.First()).ToString() )   1;
        drp_year.DataSource = b;
        drp_year.DataBind();
  

Заранее спасибо, ребята!

Ответ №1:

Я предполагаю, что вы получаете ошибку в строке b =, потому что функция Distinct() собирается вернуть объект IEnumerable . Обратите внимание, что вы пытаетесь присвоить целое число b в этой строке, но в той же самой строке вы вызываете b.First(), что, очевидно, невозможно сделать с целым числом.

Похоже, что вы действительно хотите

     b.Add(b.First()   1);
  

Однако это тоже не сработает. Вам пришлось бы сделать:

     var yearList = b.ToList();
    yearList.Add(b.First()   1);
  

Затем вы можете настроить свой источник данных на это. Кроме того, какой тип данных — Year? Очевидно, что это не строка, поскольку вам приходится использовать для нее метод toString(). И я бы подумал, что это не целое число, поскольку вы используете для него int.Parse(). Что наводит меня на мысль, что это, вероятно, DateTime , и если да, то почему бы не использовать методы, которые уже присутствуют в объекте DateTime, для манипулирования датой вместо преобразования между типами?

Редактировать: я скорректировал приведенные выше блоки кода после того, как обнаружил, что Year на самом деле является int. Кроме того, «выбрать новый { a.Year }» в его исходном коде должно быть просто «выбрать a.Year». Смотрите комментарии ниже для получения дополнительной информации…

Комментарии:

1. @StriplingWarrior Разве это не то, что я объяснял с первого по второй блоки кода?

2. @BrandonMoore Привет, yearList.Add(int.Parse((b.First()). toString()) 1); есть некоторые ошибки.. 1) Ошибка 1. Наилучший перегруженный метод подходит для ‘System. Коллекции. Generic.List<Анонимный тип #1>.Add(Анонимный тип #’ имеет некоторые недопустимые аргументы 2) Ошибка 2 Аргумент ‘1’: не удается преобразовать из ‘int’ в ‘Анонимный тип # 1’ Также year является int..

3. @anonymous1110 Вот почему я спросил, какой тип данных ‘Year’. Без этой информации я никак не мог бы точно сказать вам, что вам нужно передать в метод yearList.Add().

4. @BrandonMoore привет, год — это целое

5. @anonymous1110 Ты уверен в этом? Ваша ошибка говорит о невозможности преобразования из и int. yearList будет списком любого типа Year , поэтому, если это int, вы не должны получать эту ошибку. В строке с надписью «orderby a.Year» наведите курсор мыши на «Year» и скажите мне, указано ли там, что это значение int или что-то еще.