【问题标题】:Add List of Class in another List of class in C#在 C# 中的另一个类列表中添加类列表
【发布时间】:2019-07-12 09:26:17
【问题描述】:

我有A班、B班和C班。

A 类如下:

public class A
{
    public string ColA { get; set; }
}

B 类如下:

public class B
{
    public int ColB { get; set; }
    public List<A> a { get; set; }
}

C类为:

public class C
{
    public int ColC { get; set; }
    public ICollection<B> b { get; set; }
}

我的输入数据是:

 var ipData = new[]
    {
        new { ColC = 1, ColB = 101, ColA = "val1" },
        new { ColC = 1, ColB = 101, ColA = "val2" },
        new { ColC = 1, ColB = 102, ColA = "val3" },
        new { ColC = 1, ColB = 102, ColA = "val4" }
    };

我无法在 B 类列表下制作 A 类列表。

   var objC = new C();
   foreach(var data in ipData)
   {
         objC.ColC = data.ColC;
         var objB = new B();
         var lstB = new List<B>();
         var lstA = new List<A>();
         var objA = new A();
         objA.ColA = data.ColA;
         lstA.Add(objA);
         objB = new B { ColB = data.ColB, a = lstA };
         lstB.Add(objB);
         objC.b = lstB; 

   }

它将添加第一行数据。但是在第二行要在List&lt;A&gt; 中为val2 添加objA,因为其余数据是相同的。 现在第三行需要在List&lt;B&gt; 中添加objB 以获得新值102 及其对应的objA,即; val3val4

预期输出是:

 Class C
 C => 1 , B => 101 , A => val1, val2
          B => 102 , A => val3, val4

【问题讨论】:

  • 您真的可以显示您希望输出的样子吗?此外,您可能需要先按常用值对数据进行分组。
  • 我想将我的 C 类作为模型传递给 view 以传递这些数据。

标签: c# list collections


【解决方案1】:

您可以使用一些 Linq 方法(GroupBy 和 Select)来做到这一点:

List<C> cList2 = ipData.GroupBy(x => x.ColC).Select(colC => new C
{
    ColC = colC.Key,
    b = colC.GroupBy(colB => colB.ColB).Select(colB => new B
    {
        ColB = colB.Key,
        a = colB.Select(colA => new A
        {
            ColA = colA.ColA
        }).ToList()
    }).ToList()
}).ToList();

【讨论】:

    【解决方案2】:

    我想出了这个给我输出的东西。

            public class Student
            {
                public string sid { get; set; }
            }
            public class Strength
            {
                public int Str { get; set; }
                public List<Student> stu { get; set; }
            }
            public class Profile
            {
                public int name { get; set; }
                public ICollection<Strength> strength { get; set; }
            }
    
    
            public class Program
            {
                public static void Main(string[] args)
                {
    
             var ipData = new[]
                {
                    new { ColC = 1, ColB = 101, ColA = "val1" },
                    new { ColC = 1, ColB = 101, ColA = "val2" },
                    new { ColC = 1, ColB = 102, ColA = "val3" },
                    new { ColC = 1, ColB = 102, ColA = "val4" }
                };
                    var prof = new Profile();
                    var stren = new List<Strength>();
    
                    var dColB = ipData.Select(x => x.ColB).Distinct();
                    foreach(var newval in dColB)
                    {
                        Console.WriteLine(newval);
                        var colval = ipData.Where(x => x.ColB == newval);
                        var stud = new List<Student>();
                        foreach(var nval in colval)
                        {
                            var stuval = new Student { sid = nval.ColA };
                            stud.Add(stuval);                   
                        }
                        var strval = new Strength{ Str = newval, stu = stud };
                        stren.Add(strval);
                    }
    
                    var dColC = ipData.Select(x => x.ColC).Distinct();
                    foreach(var data in dColC)
                    {
                        prof.name = data;
                        prof.strength = stren;                
                    }
                    Console.WriteLine(prof.name);
                    foreach(var ss in prof.strength)
                    {
                        Console.WriteLine(ss.Str);
                        foreach(var nn in ss.stu)
                        {
                            Console.WriteLine(nn.sid);                          
                        }
                    }                  
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 2012-02-17
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      相关资源
      最近更新 更多