2013-07-30 48 views
0

我在ASP.NET 4.5 Web項目中使用實體框架。我有一個產品表,每個產品都有它的類別和子類別。一個類別可能沒有子類別。使用實體框架獲得每個類別和子類別中的前5個產品

表產品

  • ID
  • CATEGORY_ID
  • subcategory_id
  • 日期

表格類別

  • CATEGORY_ID
  • parent_category_id

如果類別有parent_category_id = 0,這是一個父類,否則它是在同一個表的另一個類別的子類別。

我想在實體框架中創建一個查詢,以按照日期從最新的到最舊的一個檢索每個子類別的前5個產品。

最後,我想建立表格,顯示每個子類別的前5名最新產品。

產品只能登錄到一個子類別。

有一種類型的問題有一個答案,但沒有子類別。我的問題是針對特定數據庫結構的。謝謝。

+0

'如果產品沒有一個子類,我想顯示前5名的category',我的問題了前5個產品的代碼是哪一類? ? ? 你說'否則如果它有一個子類別,我想顯示該子類別的前5名,而不是整個類別。'我的問題是哪個子類別?第一個產品的類別? –

+0

我會讓它變得簡單(我會更新這個問題使其變得簡單)。我想按日期(降序)爲每個子類別提供前五名產品。每個產品只屬於一個子類別。 –

回答

3

這裏是使用lembda expressions

YourEntities DBContext = new YourEntities(); 

List<Category> categories = DBContext.categories.Where(d=> d.category_id!=null).ToList(); 
List<Product> prodcuts = null; 
foreach (var item in categories) 
{ 
    prodcuts = DBContext.Products.Where(d => d.category_id== item.category_id) 
       .OrderByDescending(d => d.date) 
           .Take(5) 
           .ToList(); 
} 
+0

有沒有一個選項可以做到這一點,而不是使用迭代的一個查詢?我更喜歡那個。 –

+0

第二次迭代將覆蓋第一個產品,對嗎? –

+0

我不認爲你可以在一次迭代中做到這一點,因爲首先你需要所有的類別,然後你想要的產品。 是的,它會'覆蓋'他們。它取決於你的數據綁定,你想如何保持它們。製作另一個列表或數組及其中的產品或直接從這裏綁定列表。 –

2
var q= context.Categories 
    .Where(c => c.parent_category_id != 0 ) 
    .Select(c=> new { 
     c.categoryName, 
     Products = c.products.OrderByDesc(p => p.DateUpdated) 
      .Take (5) 
      .Select(p => new { 
       p.name, 
       p.price 
      }) 
    }); 
+0

它不會從每個子類別中獲取五個,而是從按日期排序的所有產品中獲取五個 –

+0

什麼是子類別關係的類別中的產品導航屬性的名稱? –

相關問題