我想要实现的目标是返回一个类别列表(以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}]
]
答案 0 :(得分:1)
投影可能是一个解决方案:
IEnumerable<Category> categories = db.Categories
.Select(c => new
{
Category = c,
FirstProduct = c.Products
.OrderByDescending(p => p.Modified)
.FirstOrDefault()
})
.AsEnumerable()
.Select(x => x.Category);
如果您不需要所有属性,则只能投影所需的属性,例如,而不是Category = c
,您可以使用CategoryName = c.Name
或在Select
之间添加OrderByDescending
和FirstOrDefault
投影Product
的属性。