我有一个表,表示类别之间可能的父子关系。根类别不会包含 ParentId 值,而是 null。我认为还需要指出的是,它应该构建 N 级深度。
例如,考虑以下 Sql 表。
类别: ID | 名称 | 父ID
其中 ParentId 是与同一个表的 Id 列的关系。
试图了解是否可以填充以下课程?
public class Category
{
public string Id
{
get;
set;
}
public string Name
{
get;
set;
}
public List<Category> Categories
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
来自诸如以下的方法:
public List<Category> GetCategories()
{
// construct using dapper.
}
Run Code Online (Sandbox Code Playgroud)
您可以从 DB 获取平面列表并用 C# 进行汇编:
[TestFixture]
public class Recursion
{
[Test]
public void Test()
{
using (var conn = new SqlConnection(@"Data Source=.\sqlexpress;Integrated Security=true; Initial Catalog=foo"))
{
var flatResult = conn.Query<Category>(@"select '1' as Id, 'Cat 1' as Name, ParentId = null
union all select '2' as Id, 'Cat 2' as Name, '1' as ParentId
union all select '3' as Id, 'Cat 3' as Name, '2' as ParentId
union all select '4' as Id, 'Cat 4' as Name, null as ParentId
union all select '5' as Id, 'Cat 5' as Name, 4 as ParentId");
var tree = BuildTree(flatResult.ToList());
}
}
private static IEnumerable<Category> BuildTree(List<Category> items)
{
items.ForEach(i => i.Categories = items.Where(ch => ch.ParentId == i.Id).ToList());
return items.Where(i => i.ParentId == null).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)