0

私が達成しようとしているのは、最新 (トップ 1) の変更された製品を含むカテゴリのリスト (JSON) を返すことです。

Product & Category クラスがあるとします。

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}]
]
4

1 に答える 1

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または追加する代わりに、必要なプロパティのみを投影できます。SelectOrderByDescendingFirstOrDefaultProduct

于 2013-05-22T17:39:15.130 に答える