У меня есть структура классов, как показано ниже. У меня есть основная категория, и она может иметь несколько подкатегорий, и эти подкатегории могут иметь подкатегории. Я хочу получить все данные из таблицы и установить его для объекта, а затем преобразовать его в JSON. Связь между категориями и подкатегориями поддерживается ParentId
. IsLast
свойство говорит мне, что у этой категории больше нет подкатегорий. Для категории с IsLast
, установленной в значение true, будет List<Recipe>
.
public class Category
{
public int id { get; set; }
public string categoryName { get; set; }
public string categoryDesc { get; set; }
public bool isLast { get; set; }
public int parentId { get; set; }
public int level { get; set; }
public List<Category> Category { get; set; }
public List<Recipe> Recipe { get; set; }
}
public class Recipe
{
public int id { get; set; }
public string RecipeName { get; set; }
public string RecipeDesc { get; set; }
}
public class CategoryRecipe
{
public int RecipeId { get; set; }
public int CategoryId { get; set; }
}
Я пробовал что-то подобное, но приведенный ниже код не работает. Не могли бы вы предложить какой-нибудь подход.
public CategoryDto GetAllCategories(int parentId, int level)
{
CategoryDto category = new CategoryDto();
Category mainCategory = null;
if (parentId == 0)
{
mainCategory = _categoryRepository.GetAll().Where(x => x.Level == 0).FirstOrDefault();
}
else
{
mainCategory = _categoryRepository.GetAll().Where(x => x.ParentId == parentId).FirstOrDefault();
}
if (mainCategory == null)
{
return null;
}
if (mainCategory.IsLast == true)
{
category.RecipeTemplate = ObjectMapper.Map<List<CategoryRecipe>>(_categoryRecipeTypesRepository.
GetAll().Where(x => x.CategoryId == mainCategory.Id).ToList());
return category;
}
var subcategories = _categoryRepository.GetAll().Where(x => x.ParentId == mainCategory.Id).ToList();
var tempList = new List<Category>();
foreach (Category cat in subcategories)
{
var subcategory = GetAllCategories(cat.Id, level + 1);
if (subcategory != null)
{
tempList.Add(ObjectMapper.Map<Category>(subcategory)); //AutoMap
}
}
category.Category = tempList;
return category;
}