查询linq到entity中一个实体的集合

本文关键字:一个 实体 集合 linq entity 查询 | 更新日期: 2023-09-27 18:06:03

我用一种简单的方式问我的问题,假设这些类:

public class Product
    {
        public int ProductId { get; set; }
        public string ProductName { get; set; }
        public ICollection<Category> Categories { get; set; }
    }
    public class Category
    {
        public int CategorytId { get; set; }
        public string CategoryName { get; set; }
        public ICollection<Product> Products { get; set; }
    }
    public class ProductViewModel
    {
        public int ProductId { get; set; }
        public string ProductName { get; set; }
        public ICollection<CategoryViewModel> CategoryViewModel { get; set; }
    }
    public class CategoryViewModel
    {
        public int CategorytId { get; set; }
        public string CategoryName { get; set; }
    }
    public class ProductContext : DbContext
    {
        public DbSet<Product> Products { get; set; }
        public DbSet<Category> Categories { get; set; }
    }

不用说,产品和类别之间存在多对多的关系,现在我只想查询所有产品的所有类别,因为每个产品都可以有多个类别。为了做到这一点,我写了这个:

public IEnumerable<ProductViewModel> GetAllProducts()
        {
            var _productContext = new ProductContext();
            var query = from product in _productContext.Products
                        join category in _productContext.Categories on product.ProductId equals category.CategorytId
                        select new ProductViewModel
                        {
                            ProductId = product.ProductId,
                            ProductName = product.ProductName,
                            CategoryViewModel = product.Categories.Select(c=>new CategoryViewModel
                            {
                                CategorytId = c.CategorytId,
                                CategoryName = c.CategoryName,
                            }).ToList()
                        };
            return query.ToList();
        }

但是我收到这个错误:

LINQ to Entities不能识别方法System.Collections.Generic.List…

我知道这是可能的查询与导航属性和包括方法,但我怎么能做到与Linq?

查询linq到entity中一个实体的集合

ProductViewModel类中,您需要将ICollection<...>更改为IEnumerable<...>,然后在CategoryViewModel分配上删除内部的.ToList()

public class ProductViewModel
{
   ...
    public IEnumerable<CategoryViewModel> CategoryViewModel { get; set; }
}
 CategoryViewModel = product.Categories.Select(c=>new CategoryViewModel
                            {
                                ...
                            })