首页 > 解决方案 > 获取要显示为树的动态对象的嵌套列表

问题描述

我有这两个课

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int? ParentId { get; set; }
}

public class CategoryVm
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<CategoryVm> SubCategories { get; set; }
}

我有一个第一类的列表,我想将它转换为第二种形式,以显示在树视图中。


示例输入

在此处输入图像描述

示例输出

在此处输入图像描述

标签: c#listrecursion

解决方案


这是我使用的代码,它工作正常

public List<CategoryVm> GetCategoriesTree(List<Category> categoriesList)
{
    var categoriesTree = categoriesList.Where(category => category.ParentCategoryId == null)
        .Select(category => new CategoryVm
        {
            Id = category.Id,
            Name = category.Name,
            SubCategories = new List<CategoryVm>()
        }).ToList();
    foreach (var category in categoriesTree)
    {
        FillSubCategories(category, categoriesList);
    }
    return categoriesTree;
}

private void FillSubCategories(CategoryVm categoryVm, List<Category> categoriesList)
{
    var subCategories = categoriesList.Where(category => category.ParentCategoryId == categoryVm.Id).ToList();
    if (subCategories.Any())
    {
        categoryVm.SubCategories = subCategories.Select(category => new CategoryVm
        {
            Id = category.Id,
            Name = category.Name,
            SubCategories = new List<CategoryVm>()
        }).ToList();
        foreach (var subCategory in categoryVm.SubCategories)
        {
            FillSubCategories(subCategory, categoriesList);
        }
    }
}

推荐阅读