DooDoo
DooDoo

Reputation: 13437

Get All Property of a specific class with one property of parent

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

Answers (1)

Andrzej Gis
Andrzej Gis

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

Related Questions