繁体   English   中英

与EF负载相关的部分收集

[英]EF load related collection partially

我想要实现的是返回类别列表(JSON),其中包含最新的(排名前1)修改过的产品。

假设我有一个“产品和类别”类别。

Class Category{
   public string Name {get;set;}
   public ICollection<Product> Products {get;set;}
   public Product FirstProduct { get { return          Products.OrderByDescending(p=>p.Modified).FirstOrDefault;}

和执行以下操作的MVC API控制器

....
return db.Categories.Include(p=>p.Products.OrderByDescending(m=>m.Modified).Take(1).FirstOrDefault());
.....

但这似乎不起作用...

预期的结果是这样的(我实际上只需要Name和FirstProduct列):

[
{Name : "Category1", FirstProduct : {Name : "Product1"}, Products : [{Name: "Product1}]
{Name : "Category2", FirstProduct : {Name : "Product1"}, Products : [{Name: "Product1}]
{Name : "Category3", FirstProduct : {Name : "Product1"}, Products : [{Name: "Product1}]
]

投影可能是一种解决方案:

IEnumerable<Category> categories = db.Categories
    .Select(c => new
    {
        Category = c,
        FirstProduct = c.Products
            .OrderByDescending(p => p.Modified)
            .FirstOrDefault()
    })
    .AsEnumerable()
    .Select(x => x.Category);

如果不需要所有属性,则可以仅投影所需的属性,例如,可以使用CategoryName = c.Name而不是Category = c或在OrderByDescendingFirstOrDefault之间添加SelectProduct项目属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM