我有一些类似对象的情况 - 基本上,每个对象都实现了一个基类型的集合。所以...
的Item1 - 列出项目2 - 列出项目3
public List Specials {get;组; }
第2项:第1项 第3项:第1项
特别 { public int Value {get;组; } public string Name {get;组; } }
现在,我可以沿着树走下去,但我想基本上想要从整个对象中获取所有“特殊”类的内容,一直到树下 - 进入一个单独的集合。 / p>
LINQ可以实现吗?或者我只需要依赖非常复杂的循环?
答案 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。