Ghooti Farangi Ghooti Farangi - 5 months ago 75
C# Question

The entity cannot be constructed in a LINQ to Entities query

There is an entity type called product that is generated by entity framework.
I have writen this query

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

The code below throws the following error : "The entity or complex type Shop.Product cannot be constructed in a LINQ to Entities query"

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

But when I use
select p
instead of
select new Product { Name = p.Name};
it works correctly.

How can I preform a custom select section?


You cannot (and should not be able to) project onto a mapped entity. You can, however, project onto an annonymous type or onto a DTO:

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

And your method will return a List of DTO's.

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