How to combine two flat lists into one nested object

后端 未结 4 494
-上瘾入骨i
-上瘾入骨i 2021-01-25 12:25

I have three lists which contains three same properties in each collection. I want to combine a result into one collection. Ex classes structure is as below

publ         


        
4条回答
  •  离开以前
    2021-01-25 13:23

    I have solution, but i am not sure if it's ok for you. It depends on data format that you have on the begining.

    solution:

    class Program
    {
        static void Main(string[] args)
        {
            var collection1 = new Collection1() { PropId1 = 1, PropId2 = 2, PropId3 = 3 };
    
            var list2 = new List()
            {
                new Collection2
                {
                    PropId1 = 11,
                    PropId2 = 22,
                    PropId3 = 33
                },
                new Collection2
                {
                    PropId1 = 22,
                    PropId2 = 33,
                    PropId3 = 44
                }
            };
            var list3 = new List()
            {
                new Collection3
                {
                    PropId1 = 111,
                    PropId2 = 222,
                    PropId3 = 333
                },
                new Collection3
                {
                    PropId1 = 222,
                    PropId2 = 333,
                    PropId3 = 444
                }
            };
    
            var result = new ResultCollection(collection1, list2, list3);
            //or
            var result2 = new ResultCollection(collection1) //but in this case you have to change your constructor
            {
                Collection2s = list2,
                Collection3s = list3
            };
            Console.ReadLine();
        }
    }
    
    public class Collection1
    {
        public int? PropId1 { get; set; }
        public int? PropId2 { get; set; }
        public int? PropId3 { get; set; }
    }
    public class Collection2
    {
        public int? PropId1 { get; set; }
        public int? PropId2 { get; set; }
        public int? PropId3 { get; set; }
    }
    public class Collection3
    {
        public int? PropId1 { get; set; }
        public int? PropId2 { get; set; }
        public int? PropId3 { get; set; }
    }
    
    public class ResultCollection : Collection1
    {
        public ResultCollection() { }
    
        public ResultCollection(Collection1 collection, List list2, List list3)
        {
            foreach (PropertyInfo prop in collection.GetType().GetProperties())
            {
                PropertyInfo prop2 = collection.GetType().GetProperty(prop.Name);
                if (prop2.CanWrite)
                    prop2.SetValue(this, prop.GetValue(collection, null), null);
            }
            Collection2s = list2;
            Collection3s = list3;
        }
    
        public List Collection2s { get; set; }
    
        public List Collection3s { get; set; }
    }
    

    But can you give an example of input data?

提交回复
热议问题