LINQ to Entitiesクエリでエンティティを構築できません質問する

LINQ to Entitiesクエリでエンティティを構築できません質問する

Productエンティティフレームワークによって生成されるエンティティタイプがあります。私はこのクエリを書きました

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

以下のコードは次のエラーをスローします:

「エンティティまたは複合型 Shop.Product は、LINQ to Entities クエリでは構築できません」

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

しかし、のselect p代わりにを使用するとselect new Product { Name = p.Name};、正常に動作します。

カスタム選択セクションを実行するにはどうすればよいですか?

ベストアンサー1

マップされたエンティティに投影することはできません(また、そうすべきではありません)。ただし、匿名型または個人情報:

public class ProductDTO
{
    public string Name { get; set; }
    // Other field you may need from the Product entity
}

そして、メソッドは DTO のリストを返します。

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

おすすめ記事