8

你知道如何修复这个错误吗?它在这一行“foreach (int s in itemColl)”中显示错误

我必须做什么?

错误 1 ​​无法将类型 'AnonymousType#1' 转换为 'int' C:\Users\Rafal\Desktop\MVC ksią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);
                }
4

4 回答 4

25

您正在itemColl使用new关键字选择,定义匿名类型,您不能foreach使用类型应用循环int。您当前的查询返回类似IEnumerable<AnonymousType>

相反,您可以这样做:

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

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

但是,如果您想在匿名类型上使用当前查询,则必须使用隐式类型var修改 foreach 循环,并且由于当前查询返回匿名类型对象,您可以Id_kat从对象中选择。就像是。

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

IMO,不建议使用第二种方法,因为您只是返回int包装在匿名类型中的类型。如果您可以将查询更改为返回,那就更好了IEnumerable<int>

于 2012-08-06T12:02:50.440 回答
7

您只需将选择更改为:

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;}
}
于 2012-08-06T12:04:42.033 回答
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);
               }
于 2012-08-06T12:04:49.793 回答
4

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

var itemColl = from p in re.Kategorie
    where p.Nazwa == category
    select p.Id_Kat;
于 2012-08-06T12:04:23.427 回答