Reputation: 13437
Please consider this codes:
class ClassA
{
public int ID { get; set; }
public string Name { get; set; }
public ClassA PropA { get; set; }
}
class ClassC
{
public ClassC()
{
var MyVar = new List<ClassA>
{
new ClassA()
{
ID = 1,
Name = "Name1",
PropA = new ClassA()
{
ID = 2,
Name = "Name2",
PropA = new ClassA()
{
ID = 3,
Name = "Name3",
PropA = new ClassA()
{
ID =4,
Name = "Name4",
PropA = null,
}
}
}
},
new ClassA()
{
ID = 5,
Name = "Name5",
PropA = new ClassA()
{
ID = 6,
Name = "Name6",
PropA = null,
}
},
new ClassA()
{
ID = 7,
Name = "Name7",
PropA = null,
},
new ClassA()
{
ID = 8,
Name = "Name8",
PropA = new ClassA()
{
ID = 9,
Name = "Name9",
PropA = new ClassA()
{
ID = 10,
Name = "Name10",
PropA = new ClassA()
{
ID = 11,
Name = "Name11",
PropA = null,
}
}
}
},
};
}
}
I want to get All ClassA
properties that aren't null and with name property of its parent. For example:
Parent Class A
--------------------------------
1)"Name1" Class A with ID = 2
2)"Name2" Class A with ID = 3
3)"Name3" Class A with ID = 4
4)"Name5" Class A with ID = 6
and...
Thanks
Upvotes: 0
Views: 80
Reputation: 14306
Do you mean something like this (C# 7):
private static IEnumerable<string> Describe(ClassA a)
{
var (parent, current) = (a, a.PropA);
while (!(current is null))
{
yield return $"{parent.Name} Class A with ID = {current.ID}";
(parent, current) = (current, current.PropA);
}
}
...
var results = MyVar.SelectMany(Describe);
As requested in a comment, C# 4 version:
private static IEnumerable<string> DescribeCSharp4(ClassA a)
{
var parent = a;
var current = a.PropA;
while (current != null)
{
yield return parent.Name + " Class A with ID = " + current.ID;
parent = current;
current = current.PropA;
}
}
...
var results = MyVar.SelectMany(DescribeCSharp4);
Upvotes: 2