C# 无限级分类的实现
什么是无限级分类?
无限级分类又称为多级分类,是指一种基于树状结构的数据分类方法。其特点是可以不断的按照需求无限拓展分类层级。
实现无限级分类的步骤
第一步:建立分类表
首先我们需要建立一个分类表,在分类表中应包含以下几个重要字段:
字段 | 类型 | 描述 |
---|---|---|
id | int | 分类编号,主键 |
name | nvarchar | 分类名称 |
parent_id | int | 父级分类编号,用来实现无限级分类 |
第二步:准备数据访问类
在无限级分类中,我们需要用到一些数据访问方法,以便于对分类表进行访问,这里我们可以使用 Entity Framework Core 进行访问,也可采用 ADO.NET 数据库访问方法。
以 Entity Framework Core 为例,我们需要先准备一个 DbContext 类作为数据访问的入口,同时需要在 DbContext 类中添加一个分类表的 DbSet 属性。
public class MyDbContext : DbContext
{
public DbSet<Category> Categories { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(Configuration.GetConnectionString("MyConnection"));
}
}
第三步:实现无限级分类数据获取方法
实现无限级分类的核心方法是获取分类的所有子分类以及它们的子分类,这里我们可以使用递归算法遍历所有的子分类。
以下是一个示例,我们可以将其作为通用的无限级分类数据获取方法:
public static List<Category> GetCategories(List<Category> categories, int? parentId = null, int level = 0)
{
var result = new List<Category>();
foreach (var category in categories.Where(x => x.ParentId == parentId))
{
category.Level = level;
result.Add(category);
result.AddRange(GetCategories(categories, category.Id, level + 1));
}
return result;
}
在获取分类数据时,我们需要将分类按照层级关系进行排序,以便于在前端实现展示层级结构:
var categories = db.Categories.ToList();
var allCategories = GetCategories(categories, null).OrderBy(x => x.Level).ThenBy(x => x.Name);
第四步:实现无限级分类在前端的展示
无限级分类在前端的展示通常使用递归算法来实现,例如:
@using System.Collections.Generic
@using MvcDemo.Models
@model List<Category>
@functions {
void RenderCategory(List<Category> categories, int parentId)
{
<ul>
@foreach (var category in categories.Where(x => x.ParentId == parentId))
{
<li>@category.Name</li>
if (categories.Any(x => x.ParentId == category.Id))
{
RenderCategory(categories, category.Id);
}
}
</ul>
}
}
<h1>分类列表</h1>
@if (Model?.Count() > 0)
{
RenderCategory(Model, null);
}
else
{
<p>暂无数据。</p>
}
无限级分类的示例
下面我们将以电商行业为例,来演示如何实现一个基于无限级分类的商品分类。
第一步:准备分类表
我们需要在数据库中创建一个分类表,表包含字段如下:
字段 | 类型 | 描述 |
---|---|---|
id | int | 商品分类编号,主键 |
name | nvarchar | 商品分类名称 |
parent_id | int | 父级商品分类编号 |
第二步:准备数据
我们创建了以下几条商品分类数据:
id | name | parent_id |
---|---|---|
1 | 电子数码 | NULL |
2 | 手机 | 1 |
3 | 电脑 | 1 |
4 | 家用电器 | NULL |
5 | 电视 | 4 |
6 | 冰箱 | 4 |
第三步:数据访问类
我们需要创建一个 DbContext 类用于访问商品分类表:
public class MyDbContext : DbContext
{
public DbSet<Category> Categories { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(Configuration.GetConnectionString("MyConnection"));
}
}
第四步:数据访问方法
我们需要创建一个用于获取所有商品分类数据的数据访问方法:
public static List<Category> GetAllCategories()
{
using (var db = new MyDbContext())
{
var categories = db.Categories.ToList();
return GetCategories(categories, null);
}
}
第五步:前端展示
我们需要在前端页面展示分类数据,选择递归算法来实现:
@using System.Collections.Generic
@using MvcDemo.Models
@model List<Category>
@functions {
void RenderCategory(List<Category> categories, int? parentId)
{
<ul>
@foreach (var category in categories.Where(x => x.ParentId == parentId))
{
<li>@category.Name</li>
if (categories.Any(x => x.ParentId == category.Id))
{
RenderCategory(categories, category.Id);
}
}
</ul>
}
}
<h1>商品分类列表</h1>
@if (Model?.Count() > 0)
{
RenderCategory(Model, null);
}
else
{
<p>暂无数据。</p>
}
在执行以上代码后,我们将会看到一个基于无限级分类的商品分类页面。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 无限级分类的实现 - Python技术站