gpt4 book ai didi

c# - 按父级、上一个和下一个 id 对菜单节点进行排序

转载 作者:太空狗 更新时间:2023-10-29 23:43:46 25 4
gpt4 key购买 nike

我有一个小菜单,我想按如下所示的数据库表 ID 进行排序:

  public class Obj
{
public string Value { get; set; }
public int? ParentNodeId { get; set; }
public int? PreviousNodeId { get; set; }
public int? NextNodeId { get; set; }
}

private IEnumerable<MenuNodeDTO> GetSortedMenuNodes(int menuId)
{
var nodes = LoadMenuNodes(menuId);
foreach (MenuNode menuNode in nodes
.Where(s => s.MenuItemId == null && s.ParentNodeId == null)
.OrderBy(x => x?.PreviousNodeId)
.Where(x => x.PreviousNodeId != x.Id))
{
MenuNodeDTO tmpMenuNode = new MenuNodeDTO();
tmpMenuNode.MenuNodeDtoId = menuNode.Id;
tmpMenuNode.MenuItemCode = menuNode.MenuItem?.Code;
tmpMenuNode.ChildMenuNodes = GetChildNodes(menuNode).ToList();
tmpMenuNode.MenuSettings = GetMenuSettings(menuNode).ToList();
yield return tmpMenuNode;
}
}

示例:

Id = 1 MainMenuPoint1 ParentNodeId = null, PreviousNodeId = null, NextNodeId = 4
Id = 2 -> 1 ChildNodeFromPoint1 ParentNodeId = 1, PreviousNodeId = null, NextNodeId = null
Id = 3 --> ChildNodeFromFirstChildNode1 ParentNodeId = 2, PreviousNodeId = null, NextNodeId = null
Id = 4 MainMenuPoint2 ParentNodeId = null, PreviousNodeId = 1, NextNodeId = null

my for each 的问题是,当 id 更改时,排序不起作用。有人知道如何按 parentid、previousid 和 next id 排序,每次检查关系的所有 id 吗?

最佳答案

 private IEnumerable<MenuNodeDTO> GetSortedNodes(Menu menu, MenuNode node)
{
List<MenuNodeDTO> items = new List<MenuNodeDTO>();

var nodes = node != null ? node.ChildMenuNodes : menu.MenuNodes;
var nextNode = node == null
? nodes.Where(c => c.PreviousNodeId == null && c.ParentNodeId == null).FirstOrDefault()
: nodes.Where(c => c.ParentNodeId == node.Id && c.PreviousNodeId == null).FirstOrDefault();

while (nextNode != null)
{
MenuNodeDTO tmpMenuNode = new MenuNodeDTO();
tmpMenuNode.MenuNodeDtoId = nextNode.Id;
tmpMenuNode.MenuItemCode = nextNode?.MenuItem?.Code;
tmpMenuNode.ChildMenuNodes = this.GetSortedNodes(menu, nextNode).ToList();
tmpMenuNode.MenuSettings = GetMenuSettings(nextNode).ToList();
items.Add(tmpMenuNode);
if (!nextNode.NextNodeId.HasValue) break;
nextNode = nextNode.NextNode;
}
return items;
}

关于c# - 按父级、上一个和下一个 id 对菜单节点进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40715842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com