Simon Loh
Simon Loh

Reputation: 335

LinQ Count based on element in child class

I have a JSON class which I used to deserialize my object to :-

 public class Response
    {
        private Meta _meta;
        private Result _result;
        private Output _output;
        public Meta meta
        {
            set
            {
                if (this._meta == null)
                {
                    this._meta = new Meta();
                }

                this._meta = value;
            }

            get
            {
                return this._meta;
            }
        }
        public Output output
        {
            set
            {
                if (this._output == null)
                {
                    this._output = new Output();
                }
                this._output = value;
            }
            get
            {
                return this._output;
            }
        }
    }

Which inherit

public class Output
    {

            ...

            public Verified verified{

            get
            {
                return this._verified;
            }
            set
            {
                if (this._verified == null)
                {
                    this._verified = new Verified();
                }
                this._verified = value;
            }

        }

in which has sub class of

 public class Verified
    {
...

public Address Address
        {

            set
            {
                if (this.address == null)
                {
                    this.address = new Address();
                }
                this.address = value;
            }
            get
            {
                return this.address;
            }
        }
        public Age Age
        {
            get
            {
                return this.age;
            }
            set
            {
                if (this.age == null)
                {
                    this.age = new Age();
                }
                this.age = value;
            }
        }
        public City City
        {
            get
            {
                return this.city;
            }
            set
            {
                if (this.city == null)
                {
                    this.city = new City();
                }
                this.city = value;
            }
        }

...

All the attribute in City, Age, and Address are the same such as

public class Address
    {
        public int code { get; set; }
        public string text { get; set; }
    }

I have manage to count how many attribute in the Verified by using

TotalQuestion = response.output.verified.GetType().GetProperties()
                    .Where(p => !p.PropertyType.IsGenericType 
                               && !p.PropertyType.IsArray)
                    .Count(); 

, and that is only half of my concern. I have to also count now many of the attribute "code" in each of the class in Address, City, Age which has value as 3.

I did tried to add .GetType().GetProperty("code") at the back of the same LinQ I used to query the total amount of question inside, but I got lost in mind how to complete it.

I hope that anyone would be able to advice on possible LinQ solution (hopefully one-liner) type.

Thanks.

Simon

Upvotes: 0

Views: 192

Answers (1)

JunaidKirkire
JunaidKirkire

Reputation: 918

I think this is what you are looking for -

var result = resp.output.verified.GetType().GetProperties().Where( 
        child => {
                    var prop = child.GetValue(resp.output.verified, null);
                    return (int)prop.GetType().GetProperty("code").GetValue(prop, null) == 3;
                }).ToList();

Upvotes: 1

Related Questions