递归选择类似对象(LINQ)

时间:2010-01-11 20:52:38

标签: linq-to-sql

我有一些类似对象的情况 - 基本上,每个对象都实现了一个基类型的集合。所以...

的Item1 - 列出项目2 - 列出项目3

public List Specials {get;组; }

第2项:第1项 第3项:第1项

特别 {   public int Value {get;组; }   public string Name {get;组; } }

现在,我可以沿着树走下去,但我想基本上想要从整个对象中获取所有“特殊”类的内容,一直到树下 - 进入一个单独的集合。 / p>

LINQ可以实现吗?或者我只需要依赖非常复杂的循环?

1 个答案:

答案 0 :(得分:2)

您可以将Linq与递归函数结合使用:

static IEnumerable<Special> getSpecials(Item1 item1)
{
    var item2Specials = item1.Items2.SelectMany(item2 => getSpecials(item2));
    var item3Specials = item1.Items3.SelectMany(item3 => getSpecials(item3));
    return item1.Specials.Concat(item2Specials).Concat(item3Specials);
}

我理解你的班级结构符号有点困难。我假设您的意思是以下C#类:

class Item1
{
    public List<Item2> Items2 = new List<Item2>();
    public List<Item3> Items3 = new List<Item3>();
    public List<Special> Specials = new List<Special>();
}

class Item2 : Item1 { }
class Item3 : Item1 { }

class Special
{
    public int Value { get; set; }
    public string Name { get; set; }
}

我也假设你的意思是Linq-to-objects而不是Linq-to-SQL。如果要在数据库中存储层次数据,则不应该这样做,而是查看nested set model