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();
我该如何撰写声明?请.....
答案 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