无法将类型'System.Collections.Generic.List'隐式转换为'System.Collections.Generic.List

时间:2009-06-21 03:33:23

标签: asp.net

Cannot implicitly convert type 'System.Collections.Generic.List' to 'System.Collections.Generic.List

Error 2 Cannot implicitly convert type 'System.Collections.Generic.List<AnonymousType#1>' to 'System.Collections.Generic.List<Product>' D:\Fortune\App_Code\BL\StoreController.cs 204 45 D:\Fortune\

public static List<Product> GetProductsByCategoryID(int productCategoryId )
{
    FortuneDataContext db = SiteController.GetNewFortuneDataContext();
    List<Product>  prods = (from p in db.Products
                        join pc in db.ProductCategories 
                        on p.ProductCategoryId equals pc.ProductCategoryId 
                        where pc.ParentProductCategoryId == productCategoryId
                        select new
                        {
                           p.ProductId,
                           p.ProductCategoryId,
                           pc.ParentProductCategoryId,               
                           ProductName = p.Name,
                           Category = pc.Name,
                           p.Price,
                           p.ProductYear
                           }).ToList();  
    return prods;

}

我希望选择新的{...}中的所有字段,我会像那样编写选择,但所有字段都不在Product表中.....

          select new Product
                    {
                       p.ProductId,
                       p.ProductCategoryId,
                       pc.ParentProductCategoryId,               
                       ProductName = p.Name,
                       Category = pc.Name,
                       p.Price,
                       p.ProductYear
                       }).ToList();  

我该如何撰写声明?请.....

5 个答案:

答案 0 :(得分:6)

使用选择新产品,而不是选择新。它将返回Product:

类型的列表
...         
select new Product                   
{
    p.ProductId,
    p.ProductCategoryId,
    pc.ParentProductCategoryId,                                          
    ProductName = p.Name,                           
    Category = pc.Name,                           
    p.Price,                           
    p.ProductYear                           
}).ToList();      

return prods;

答案 1 :(得分:3)

您在此行中选择了匿名类型:

select new { ... }

试试这一行:

select p

如果您尝试返回List<Product>,则除非ProductCategory具有链接到{{Product的导航属性,否则您将无法在返回的列表中添加ProductCategory信息1}}。

答案 2 :(得分:1)

当您将List声明为类型时,您应该考虑添加正确的模板

例如

public static List<Product> GetProductsByCategoryID(...)

答案 3 :(得分:1)

你正在创建一个匿名类型,你不能从一个方法返回一个匿名类型(实际上有一种方法,但它只是创建一个新的类而不值得它),它不是匹配List的签名。因此,您必须创建一个新类,其中包含所需属性的定义,例如ProductDetails,并返回List。

答案 4 :(得分:0)

我遇到了同样的问题..您应该将List<Product> prods更改为var prods