你知道如何解决这个错误吗?它在这行“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);
}
答案 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);
}