2013-02-11 4 views
-3

Предполагая следующий hierarichal родительский/дочерний модель категории:Как-получить иерархические категории, которая содержит хотя бы один продукт

public class Category 
    { 
     public int CategoryId { get; set; } 
     public Category ParentCategory { get; set; } 
     public IList<Category> ChildCategories { get; set; } 
     public IList<Product> Products { get; set; } 
    } 

Я хочу, чтобы получить все категории в иерархическом образом, что содержит, по меньшей мере, один продукт.

Категория корня

a1. Подкатегория 1 (0 товар)

a2. Подкатегория 2 (1 продукт)

b1. Подкатегория 1 (0 товар)

b2. Подкатегория 2 (1 продукт)

b3. Sub Категория 3 (0 продукт)

Ожидаемый результат:

Root Категория

a1. Подкатегория 1

a2. Подкатегория 2

b1. Подкатегория 1

b2. Подкатегория 2

Спасибо.

+0

Я попытался начать со всех продуктов, получив их прикрепленные категории и попытался восстановить их, чтобы воссоздать иерархию. Но не удастся. –

+1

Я подозреваю, что у вас есть 3 голоса и не много ответов, потому что это похоже на вопрос «напишите код для меня». Вы получите дополнительную помощь, если вы отредактируете свой вопрос с доказательствами того, что вы попытались решить это самостоятельно. –

ответ

0

Если вы используете Linq, то это просто. Что-то вдоль линий:

var categoriesWithProducts = category.Where(x=> x.Products.Count() > 0) 
+0

Мне нужно получить иерархию, а не все категории сглаживать –

0

Не тестировалось:

Category? GetNotEmpty(Category category) 
{ 
    Category returnCategory = new Category(); 
    foreach(Category subCategory in category.ChildCategories) 
      if(GetNotEmpty(subCategory) != null) returnCategory.ChildCategories.Add(GetNotEmpty(subCategory)); 

    if(returnCategory.ChildCategories.Count > 0 || returnCategory.Products.Count > 0) return returnCategory; 
    else return null; 
} 

И призывают все главные категории.

Смежные вопросы