C# Can';无法得到我需要的正确查询结果

C# Can';无法得到我需要的正确查询结果,c#,recursion,linq,C#,Recursion,Linq,我有一个目标 class item { Guid id; String name; List<item> childs;} 类项{Guid id;字符串名称;列表子项;} 它的数据有两部分 咖啡厅 --约翰 ----盒子 --罗密欧 及 咖啡厅 --约翰 --罗密欧 ----盒子 所以,盒子刚换了主人 现在我需要把这个结构作为一个字符串 因此,它必须是: 咖啡馆,约翰,盒子,罗密欧 及 咖啡馆,约翰,罗密欧,盒子 我有密码: public static IEnumerable&l

我有一个目标

class item { Guid id; String name; List<item> childs;}
类项{Guid id;字符串名称;列表子项;}
它的数据有两部分

咖啡厅

--约翰

----盒子

--罗密欧

咖啡厅

--约翰

--罗密欧

----盒子

所以,盒子刚换了主人

现在我需要把这个结构作为一个字符串

因此,它必须是:

咖啡馆,约翰,盒子,罗密欧

咖啡馆,约翰,罗密欧,盒子

我有密码:

public static IEnumerable<item> get_in_one_row(this IEnumerable<item> itemsTree)
    {
        return itemsTree.Select(p=>p).Union(itemsTree.SelectMany(p=>p.childs.get_in_one_row()));
    }
public static IEnumerable get_在一行中(此IEnumerable itemsTree)
{
返回itemsTree.Select(p=>p.Union)(itemsTree.SelectMany(p=>p.childs.get_in_one_row());
}
但我总是得到:咖啡馆、约翰、罗密欧、盒子——不管谁是盒子的主人

我该怎么办


谢谢。

要按顺序获得结果,您需要以不同的方式遍历树:

public static IEnumerable<item> get_in_one_row(this IEnumerable<item> itemsTree)
    {
        return itemsTree.SelectMany(p => Enumerable.Repeat(p,1).Concat(p.childs.get_in_one_row()));
    }
public static IEnumerable get_在一行中(此IEnumerable itemsTree)
{
returnitemstree.SelectMany(p=>Enumerable.Repeat(p,1).Concat(p.childs.get_in_one_row());
}

Union不保证维持秩序。它做一个独特的操作。使用Concat。还有其他错误,因为对于不同的输入,您应该至少看到不同的输出。可能是错的,但为什么什么都没有改变。我觉得你误解了什么,或者输入的不是你认为的。