查询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?
在ProductViewModel
类中,您需要将ICollection<...>
更改为IEnumerable<...>
,然后在CategoryViewModel
分配上删除内部的.ToList()
public class ProductViewModel
{
...
public IEnumerable<CategoryViewModel> CategoryViewModel { get; set; }
}
CategoryViewModel = product.Categories.Select(c=>new CategoryViewModel
{
...
})