在ASP.Net Core和EF Core中,可以使用递归来包含子项并映射到视图模型。以下是一个示例解决方案,其中包含了代码示例:
首先,定义实体类和视图模型类。
// 实体类
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public List SubCategories { get; set; }
}
// 视图模型类
public class CategoryViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public List SubCategories { get; set; }
}
接下来,创建一个数据访问层,使用EF Core来查询数据库。
public class CategoryRepository
{
private readonly YourDbContext _dbContext;
public CategoryRepository(YourDbContext dbContext)
{
_dbContext = dbContext;
}
// 递归获取所有分类及其子分类
public List GetAllCategories()
{
var categories = _dbContext.Categories.Include(c => c.SubCategories).ToList();
return MapToViewModel(categories);
}
// 递归映射实体类到视图模型类
private List MapToViewModel(List categories)
{
return categories.Select(c => new CategoryViewModel
{
Id = c.Id,
Name = c.Name,
SubCategories = MapToViewModel(c.SubCategories)
}).ToList();
}
}
最后,在控制器中使用数据访问层来获取数据并返回到视图。
public class CategoryController : Controller
{
private readonly CategoryRepository _categoryRepository;
public CategoryController(CategoryRepository categoryRepository)
{
_categoryRepository = categoryRepository;
}
public IActionResult Index()
{
var categories = _categoryRepository.GetAllCategories();
return View(categories);
}
}
在视图中,可以通过遍历视图模型类的子分类来显示所有分类及其子分类。
@model List
@foreach (var category in Model)
{
-
@category.Name
@if (category.SubCategories.Any())
{
@foreach (var subCategory in category.SubCategories)
{
- @subCategory.Name
}
}
}
以上就是一个简单的示例,演示了如何在ASP.Net Core和EF Core中使用递归包含子项并映射到视图模型。根据实际需求,你可能需要根据自己的数据结构和业务逻辑进行相应的调整和修改。