首页 > 解决方案 > 平面数据只保存最后一个对象在最后

问题描述

我想将这些数据扁平化到视图模型中,但我不知道该怎么做。下面的示例只会将最后一个 listOfChild 数据保存到视图模型中。我正在使用 foreach 我应该使用其他可以收集数据的东西吗?如果我将 add 方法收集到每个的第二个中,它将不会添加最后一条记录。

        List<Subscription> ListOfSubscriptions = new List<Subscription>();
        List<SubscriptionChild> SubscriptionChild = new List<SubscriptionChild>();
        SubscriptionChild.Add(new SubscriptionChild() { ChildProductId = 1, ChildProductName = "Child 1" });
        SubscriptionChild.Add(new SubscriptionChild() { ChildProductId = 2, ChildProductName = "Child 2" });
        ListOfSubscriptions.Add(new Subscription() { SubscriptionId = 1, ParentProductName = "Product 1",ListOfSubscriptionChild= SubscriptionChild });
        SubscriptionChild.Clear();
        ListOfSubscriptions.Add(new Subscription() { SubscriptionId = 2, ParentProductName = "Product 2"});
        SubscriptionChild.Clear();
        SubscriptionChild.Add(new SubscriptionChild() { ChildProductId = 3, ChildProductName = "Child 3" });
        SubscriptionChild.Add(new SubscriptionChild() { ChildProductId = 4, ChildProductName = "Child 4" });
        ListOfSubscriptions.Add(new Subscription() { SubscriptionId = 1, ParentProductName = "Product 3", ListOfSubscriptionChild = SubscriptionChild });


        List<SubscriptionViewModel> SubscriptionViewModel = new List<SubscriptionViewModel>();
        foreach (var Subscription in ListOfSubscriptions)
        {
            SubscriptionViewModel vm = new SubscriptionViewModel();
            vm.ParentProductId = Subscription.ParentProductId;
            vm.ParentProductName = Subscription.ParentProductName;
            var listOfChild = Subscription.ListOfSubscriptionChild.ToList();
            foreach (var item in listOfChild)
            {
                vm.ChildProductId = item.ChildProductId;
                vm.ChildProductName = item.ChildProductName;
            }
            SubscriptionViewModel.Add(vm);
        }


    class Subscription
    {
        public int SubscriptionId { get; set; }
        public int ParentProductId { get; set; }
        public string ParentProductName { get; set; }
        public List<SubscriptionChild> ListOfSubscriptionChild { get; set; }
    }
    class SubscriptionChild
    {
        public string ChildProductName { get; set; }
        public int ChildProductId { get; set; }
    }
    class SubscriptionViewModel
    {
        public int SubscriptionId { get; set; }
        public int ParentProductId { get; set; }
        public string ParentProductName { get; set; }
        public string ChildProductName { get; set; }
        public int ChildProductId { get; set; }
    }

标签: c#collections

解决方案


只是你应该增加一行代码:

foreach (var Subscription in ListOfSubscriptions)
    {
        SubscriptionViewModel vm = new SubscriptionViewModel();
        vm.ParentProductId = Subscription.ParentProductId;
        vm.ParentProductName = Subscription.ParentProductName;
        var listOfChild = Subscription.ListOfSubscriptionChild.ToList();
        foreach (var item in listOfChild)
        {
            vm.ChildProductId = item.ChildProductId;
            vm.ChildProductName = item.ChildProductName;
            SubscriptionViewModel.Add(vm);
        }
       
    }

推荐阅读