Map Categories

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
				
public class CategoriesMapping {
	public int CategoriesMappingID;
	public int CatID;
	public int MapCatID;
}

public class Program
{
	
	
      static List<CategoriesMapping> categoriesMapping = new List<CategoriesMapping>
        {
            new CategoriesMapping { CategoriesMappingID = 1, CatID = 1, MapCatID = 2},
            new CategoriesMapping { CategoriesMappingID = 2, CatID = 1, MapCatID = 5},
            new CategoriesMapping { CategoriesMappingID = 3, CatID = 2, MapCatID = 3},
            new CategoriesMapping { CategoriesMappingID = 4, CatID = 2, MapCatID = 4},
            new CategoriesMapping { CategoriesMappingID = 5, CatID = 5, MapCatID = 6},
            new CategoriesMapping { CategoriesMappingID = 6, CatID = 5, MapCatID = 7},
            new CategoriesMapping { CategoriesMappingID = 7, CatID = 5, MapCatID = 10},
            new CategoriesMapping { CategoriesMappingID = 8, CatID = 5, MapCatID = 11},
            new CategoriesMapping { CategoriesMappingID = 9, CatID = 2, MapCatID = 12},
            new CategoriesMapping { CategoriesMappingID = 10, CatID = 3, MapCatID = 13},
            new CategoriesMapping { CategoriesMappingID = 11, CatID = 3, MapCatID = 14}
        };
	
	public static void Main()
	{
		foreach(int i in GetNoDescendateCategoriesCategoryId(2).OrderBy(x=>x))
		    Console.WriteLine("Category:" + i);
	}
	
	public static List<int> GetNoDescendateCategoriesCategoryId(int categoryId) {
       List<int> newCategories = new List<int>();
       List<int> childCategories = categoriesMapping.Where(m => m.CatID == categoryId).Select(x=> x.MapCatID).ToList();

       if(childCategories.Count == 0) {
          return new List<int>() {categoryId};
       }
       foreach (int catId in childCategories ) {
          newCategories.AddRange(GetNoDescendateCategoriesCategoryId(catId));
       }
       return newCategories;
   }
}
;