Не удается преобразовать тип 'AnonymousType#1'

знаете ли вы, как исправить эту ошибку? Это показывает ошибку в этой строке " foreach (int s in itemColl)"

что я должен делать?

Ошибка 1 не удается преобразовать тип "AnonymousType#1" в 'int' C:UsersRafalDesktopMVC ksiązkamoj projektsklepспортивный магазин.WebUIКонтроллерыProductController.cs 37 21 спортивный магазин.Web-интерфейс

var itemColl = from p in re.Kategorie
               where p.Nazwa == category
               select new
               {
                   p.Id_kat
               };


                foreach (int s in itemColl)
                {
                    Console.WriteLine(s);
                }

5 ответов


выбор itemColl С new ключевое слово, задание анонимного типа, вы не можете применить foreach петли с int тип. Ваш текущий запрос возвращает что-то вроде IEnumerable<AnonymousType>

вместо этого вы можете сделать:

var itemColl = from p in re.Kategorie
               where p.Nazwa == category
               select p.Id_Kat;

возвращает IEnumerable<int> и что вы можете использовать в текущем цикле foreach.

но если вы хотите использовать текущий запрос с выбором анонимного типа, вам нужно изменить цикл foreach с помощью неявный тип var, и поскольку ваш текущий запрос возвращает объект анонимного типа, вы можете выбрать Id_kat из объекта. Что-то вроде того.

foreach (var s in itemColl)
{
    Console.WriteLine(s.Id_kat);
}

IMO, второй подход не рекомендуется, потому что вы просто возвращаете int тип завернутой в анонимный тип. Лучше, если вы можете изменить свой запрос на return IEnumerable<int>


вам просто нужно изменить select на:

var itemColl = from p in re.Kategorie 
    where p.Nazwa == category 
    select p.Id_kat;

Это создаст IEnumerable<int> что вы пытаетесь использовать в foreach.

на select new { p.Id_Kat } создает новый Анонимного Типа что является самым простым способом сказать, что это новый класс, как это:

class AnonymousType#1
{
    public int Id_Kat {get; set;}
}

var itemColl = from p in re.Kategorie
               where p.Nazwa == category
               //This is Anonymous Type
               select new
               {
                  //Anonymous type's attribute(s) go(es) here 
                  IntItem = p.Id_kat
               };

               foreach (var s in itemColl)
               {
                  Console.WriteLine(s.IntItem);
               }

Ну, вы можете вернуть реальное (int)-значение вместо анонимного linq-result

var itemColl = from p in re.Kategorie
    where p.Nazwa == category
    select p.Id_Kat;

foreach (var s in itemColl)
{
    Console.WriteLine(s.Id_kat);
}