2013-10-05 63 views
0

我有一个对象无法得到正确的查询结果,我需要

class item { Guid id; String name; List<item> childs;} 

有它的数据的两个部分。

网吧

--John

----盒

--Romeo

网吧

--John

--Romeo

----盒

所以,盒子只是改变了它的主人。

现在我需要得到这个结构作为一个字符串。

所以,它必须是:

咖啡厅,约翰,盒,罗密欧

咖啡厅,约翰,罗密欧,箱

我有代码:

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())); 
    } 

但我总是得到:咖啡馆,约翰,罗密欧,盒子 - 无论谁是盒子的主人。

我该怎么办?

谢谢。

+0

联盟不能保证维持秩序。它做了一个独特的操作。使用Concat。 – usr

+0

效果相同..... – Monochromie

+0

还有其他的错误,因为对于不同的输入,你至少应该看到不同的输出。可能是错的,但为什么没有改变。我说的是你误解了某些东西,或者输入的不是你认为的东西。 – usr

回答

1

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

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())); 
    } 
相关问题