要求:
一个菜单表
里面有个父菜单和子菜单,最外一层的是最大的父菜单,如何是一层一层的子菜单,如图所示:
菜单数据库表中有个MenuCode 和 MenuCodeFather 对应关系,
例如菜单4,5,6的MenuCodeFather等于菜单3的MenuCode
菜单7,8的 MenuCodeFather等于菜单4的MenuCode
做法:
1.查询出来所有的菜单并放到一个集合中
2.将这个集合轮询,把集合满足集合中MenuCodeFather字段等于MenuCode字段的放到本身
3.把最外一层显示出来,其他过滤掉
public List<MenuDto> GetAllListMenus()
{
// 1.获取所有菜单
var menuAll = _menuRepository.Where(m => m.IsDelet == false).ToList();
List<MenuDto> menuDtoList = new List<MenuDto>();
foreach (var menu in menuAll)
{
var menuDtomp = menu.Adapt<MenuDto>();//映射方法
menuDtoList.Add(menuDtomp);
}
// 2.将这个集合轮询,把集合满足集合中MenuCodeFather字段等于MenuCode字段的放到本身
foreach (var menu in menuDtoList)
{
menu.MenuChild = menuDtoList.FindAll(i => i.MenuCodeFather == menu.MenuCode);
}
// 3.把最外一层显示出来,其他过滤掉
menuDtoList = menuDtoList.FindAll(m => string.IsNullOrEmpty(m.MenuCodeFather));
return menuDtoList;
}
PS:
MenuDto 这个实体里面要放一个子菜单实体集合,参考如下:
public class MenuDto : Entity
{
/// <summary>
/// 菜单名称
/// </summary>
public string MenuName { get; set; }
/// <summary>
/// 菜单编码
/// </summary>
public string MenuCode { get; set; }
/// <summary>
/// 父菜单编码
/// </summary>
public string MenuCodeFather { get; set; }
/// <summary>
/// 子菜单集合
/// </summary>
public List<MenuDto> MenuChild { get; set; }
}