【问题标题】:Linq query for Nested child litems n-depth c# [duplicate]嵌套子项的Linq查询深入c# [重复]
【发布时间】:2018-07-26 01:31:37
【问题描述】:

尝试将同一对象的子项查询到 n 深度并以以下格式显示。所以为每个子猫添加标签空间。

Cat 1
   Sub Cat 1 - 1
   Sub Cat 1 - 2
Cat 2
   Sub Cat 2 - 1
   Sub Cat 2 - 2
          Sub Cat 3 - 2 - 2

class NavItem {
    public string label { get; set; }
    public List<NavItem> childItems { get; set; }
}

创建项目,

var item = new NavItem()
            {
                label = "Root",
                childItems = new List<NavItem>() {
                    new NavItem() { label = "Cat 1" , childItems = new  List<NavItem>() {
                        new  NavItem() { label = "Sub Cat 1 - 1" },
                        new  NavItem() { label = "Sub Cat 1 - 2" },
                    } },
                    new NavItem() { label = "Cat 2", childItems = new  List<NavItem>() {
                        new  NavItem() { label = "Sub Cat 2 - 1" },
                        new  NavItem() { label = "Sub Cat 2 - 2", childItems = new List<NavItem>() {
                            new NavItem() { label = "Sub Cat 3 - 2 - 2"}
                        } },
                    }  }, 
                }
            };

我有以下代码,但不完整。它只能走两个深度

item.childItems.ForEach(i => {
                Console.WriteLine(i.label);
                i.childItems.ForEach(i1 =>
                {
                    Console.WriteLine("\t" + i1.label);
                });
            });

【问题讨论】:

  • 您的“LINQ 查询”不使用任何 LINQ 方法,除了只遍历深度 2。它甚至不模拟 LINQ 编程风格。

标签: c# linq


【解决方案1】:

是的,正如第一个答案所示,这需要递归。

Display(item, 0);

void Display(NavItem item, Int32 tabs)
{
    Console.WriteLine($"{new String('\t', tabs)}{item.label}");
    if (item.childItems != null)
    {
        foreach (var child in item.childItems)
        {
            Display(child, tabs + 1);
        }
    }
}

【讨论】:

    【解决方案2】:

    我认为你不能只编写一个 LINQ 查询来实现你想要的,因为事先不知道深度,所以你需要编写一个遍历树的递归函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      相关资源
      最近更新 更多