如何解决这个转换类型错误?

时间:2009-06-20 12:42:41

标签: asp.net

如何解决此转换类型错误?

  

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

     

错误2无法隐式转换类型   'System.Collections.Generic.List<AnonymousType#1>'   至   '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;

}

2 个答案:

答案 0 :(得分:3)

将选择更改为

select new Product {ProductId = p.ProductID
                       ...}).ToList();  

   select p ...

如果要提取所有产品字段

错误是您的列表项不是产品

答案 1 :(得分:3)

问题是您的查询未返回产品。它返回一个匿名类型,因为您使用select new {}来预测新类型。

select new { ... }

您可以创建一个在对象中具有类别名称的新类型,并更改方法以返回该类型,或者如果您使用linq to sql,则可以对返回的项目执行类似product.category.name的操作

 List<Product>  prods = (from p in db.Products
                           join pc in db.ProductCategories on p.ProductCategoryId equals pc.ProductCategoryId
                            where pc.ParentProductCategoryId == productCategoryId
                           select p).ToList<Product>();