using System.Collections.Generic;
public class CategoriesMapping {
public int CategoriesMappingID;
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));