1
私は、ネストされたクラスを持っている:C#のネストされたオブジェクトをフラット化
class Item
{
public Int32 Id { get; set; }
public Int32 Pid { get; set; }
public String Name { get; set; }
public IEnumerable<Item> Children { get; set; }
}
今、私はので、私はすべての項目とそのchilderenの名前を取得することができ、これを平らにしたいです。
ここで問題となるのは、これがどれだけ深いレベルにあるかわかりません。私がいない
How to flatten nested objects with linq expression
あなたが持っているどのように多くのレベルを知っている場合、これは素晴らしいです、:
は、私が見ていました。だから、:
var r = from b in items
from c in b.Children
from d in c.Children
...
select new { b.Name, c = c.Name, d = d.Name ... };
は私が必要なものほとんどありませんが、私は深く、私は行く必要がどのように多くのレベルがわからない、また一つの項目が子供を持っていない場合、それは何も返しません。 。
私は推測すると再帰的なルーチンが必要ですが、見つけられないようです。 私はIEnumerableを見ましたが、私はまだこれを理解していません:)
だから、どんな助けも非常に上手くいくでしょう。あなたは結果を投影できるすべての名前を取得するには
public IEnumerable<Item> GetAllChildren(Item item)
{
return item.Children.Concat(item.Children.SelectMany(GetAllChildren));
}
:
LINQのソリューションは、とても恐ろしく非効率的であることを恥を...私はそれを使用することをお勧めします(Eric Lippertのように!) –