无法转换类型'AnonymousType#1'

时间:2012-08-06 12:01:41

标签: c# linq

你知道如何解决这个错误吗?它在这行“foreach(int in itemColl)”

中显示错误

我必须做什么?

  

错误1无法将类型'AnonymousType#1'转换为   'int'C:\ Users \ Rafal \ Desktop \MVCksiązka\ moj   projekt \ sklep \ SportsStore.WebUI \ Controllers \ ProductController.cs 37 21 SportsStore.WebUI

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 个答案:

答案 0 :(得分:22)

您选择使用itemColl关键字new,定义anonymous type,不能将foreach循环应用于int类型。您当前的查询返回IEnumerable<AnonymousType>

之类的内容

相反,您可以这样做:

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

这将返回IEnumerable<int>并且您可以在当前的foreach循环中使用。

但是如果你想在匿名类型上选择使用当前查询,则必须使用隐式类型var修改foreach循环,并且由于当前查询返回匿名类型对象,因此可以选择{来自对象的{1}}。就像是。

Id_kat

IMO,不建议采用第二种方法,因为您只是返回一个包含在匿名类型中的foreach (var s in itemColl) { Console.WriteLine(s.Id_kat); } 类型。如果您可以更改查询以返回int

,则效果会更好

答案 1 :(得分:7)

您只需将选择更改为:

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

这将创建IEnumerable<int>,这是您在foreach中尝试使用的内容。

select new { p.Id_Kat }正在创建一个新的Anonymous Type,这是最简单的说法是这样的新类:

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

答案 2 :(得分:5)

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);
               }

答案 3 :(得分:4)

好吧,你可以返回一个真实的(int)值而不是一个匿名的linq-result

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

答案 4 :(得分:-1)

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