无法在LINQto实体查询中构造实体

无法在LINQto实体查询中构造实体

有一个名为Products的实体类型,它是由实体框架生成的。我写了这个查询

public IQueryable<Product> GetProducts(int categoryID){
    return from p in db.Products
           where p.CategoryID== categoryID           select new Product { Name = p.Name};}

下面的代码引发以下错误:

“实体或复杂类型的Shop.Product不能在LINQtoEntites查询中构建”

var products = productRepository.GetProducts(1).Tolist();

但当我用select p而不是select new Product { Name = p.Name};它的工作原理是正确的。

如何预置自定义选择部分?


慕无忌1623718
浏览 567回答 4
4回答

jeck猫

这里有一种方法可以做到这一点,而不必声明ADI类:public&nbsp;List<Product>&nbsp;GetProducts(int&nbsp;categoryID){ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;query&nbsp;=&nbsp;from&nbsp;p&nbsp;in&nbsp;db.Products &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;p.CategoryID&nbsp;==&nbsp;categoryID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;new&nbsp;{&nbsp;Name&nbsp;=&nbsp;p.Name&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;products&nbsp;=&nbsp;query.ToList().Select(r&nbsp;=>&nbsp;new&nbsp;Product &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;=&nbsp;r.Name; &nbsp;&nbsp;&nbsp;&nbsp;}).ToList(); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;products;}但是,只有当您希望将多个实体组合在一个实体中时,才会使用此方法。上面的功能(简单的产品到产品映射)如下所示:public&nbsp;List<Product>&nbsp;GetProducts(int&nbsp;categoryID){ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;query&nbsp;=&nbsp;from&nbsp;p&nbsp;in&nbsp;db.Products &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;p.CategoryID&nbsp;==&nbsp;categoryID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;products&nbsp;=&nbsp;query.ToList(); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;products;}
打开App,查看更多内容
随时随地看视频慕课网APP