LinQ Count基于子类中的元素

时间:2015-02-09 07:40:20

标签: c# linq

我有一个JSON类,我曾经将我的对象反序列化为: -

 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;
            }
        }
    }

继承

public class Output
    {

            ...

            public Verified verified{

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

        }

其中有子类

 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;
            }
        }

...

城市,年龄和地址中的所有属性都是相同的,例如

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

我已设法计算使用

验证的属性数量
TotalQuestion = response.output.verified.GetType().GetProperties()
                    .Where(p => !p.PropertyType.IsGenericType 
                               && !p.PropertyType.IsArray)
                    .Count(); 

,这只是我担心的一半。我现在还要计算许多属性" code"在地址,城市,年龄的每个类中,其值为3。

我确实尝试在同一个LinQ的后面添加.GetType()。GetProperty("代码")我用来查询里面的问题总量,但我记得怎么样完成它。

我希望任何人都可以就可能的LinQ解决方案(希望是单行)类型提出建议。

感谢。

西蒙

1 个答案:

答案 0 :(得分:1)

我认为这就是你要找的 -

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();