C# - 将数据添加到列表内的列表中

时间:2016-05-17 08:54:49

标签: c# .net list

如何将表格中的以下数据添加到名为Vehicles?的列表中?

enter image description here

{{1}}

现在,如何将显示的表中的数据添加到名为Vehicles的列表中?我稍后会创建其他车辆......

5 个答案:

答案 0 :(得分:4)

您有几个错误的决定,一些是设计缺陷,一些是次要的C#命名约定违规。

一对值得提及的缺陷:

  1. vehID 应该是字符串而不是int(示例" XPT")
  2. Movment有名字,价值和时间。它没有值和时间列表。
  3. <强>创作:

    List<Vehicle> vehicles = new List<Vehicle>();
    
    Vehicle vehicle = new Vehicle()
    {
        Id = "XPT",
        Description = "Average Car",
        Steps = new List<Step>()
        {
            new Step() {
                Name = "move car",
                Movements = new List<Movement>()
                {
                    new Movement("engage 1st gear", 1, 1),
                    new Movement("reach 10kph", 10, 5),
                    new Movement("maintain 10kph", 10, 12),
                }
            },
            new Step() {
                Name = "stop car",
                Movements = new List<Movement>()
                {
                    new Movement("reach 0kph", 10, 4),
                    new Movement("put in neutral", 0, 1),
                    new Movement("turn off vehicle", 0, 0),
                }
            }
        }
    };
    vehicles.Add(vehicle);
    

    <强>实体:

    public class Movement
    {
        public string Name { get; set; }
        public double Values { get; private set; }
        public double Time { get; private set; }
    
        public Movement(string name, double values, double time)
        {
            Name = name;
            Values = values;
            Time = time;
        }
    }
    
    public class Step
    {
        public string Name { get; set; }
        public IList<Movement> Movements { get; set; }
    }
    
    public class Vehicle
    {
        public string Id { get; set; } // Should be changed to string
        public string Description { get; set; }
        public IList<Step> Steps { get; set; }
    }
    

答案 1 :(得分:1)

您应该创建如下所示的类:

public class criterias
{
    public double values { get; set; }
    public double time { get; set; }
}

public class movChannels
{
    public movChannels
    {
        criteria = new List<criterias>();
    }
    public string name { get; set; }
    public IList<criterias> criteria { get; set; }
}

public class stepsList
{
    public stepsList
    {
        stepChannelsCriteria = new List<movChannels>();
    }
    public string steps { get; set; }
    public IList<movChannels> stepChannelsCriteria { get; set; }
}

public class vehicles
{
    public vehicles
    {
        vehValCriteria = new List<stepsList>();
    }
    public int vehID { get; set; }
    public string vehDescription { get; set; }
    public IList<stepsList> vehValCriteria { get; set; }
    public movChannels movments { get; set; }
}

答案 2 :(得分:0)

怎么样?

public class VehiclesViewModel
{
    public List<vehicles> Vehicles { get; private set; }

    public void Initalize()
    {
      this.Vehicles  = new List<vehicles>();

        var vehicle = new vehicles
                       {
                           vehID = 1,
                           vehDescription = "firstDescription",
                       };
        var stepsList = new stepsList
                        {
                            steps = "firstStep",
                        };
        var movChannel = new movChannels
                          {
                              name = "firstChannel",
                          };
        var criteria = new criterias
                        {
                            values = 0.5,
                            time = 0.5
                        };

        movChannel.criteria.Add(criteria);
        stepsList.stepChannelsCriteria.Add(movChannel);
        vehicle.vehValCriteria.Add(stepsList);

        this.Vehicles.Add(vehicle);
    }
}

答案 3 :(得分:0)

在您的表中,VehicleId的类型为字符串。确保Vehicle类中的VehicleId属性也匹配相同。

您可以使用集合初始值设定项以这种方式设置子对象的值:

 var data = new vehicles()
        {
            vehID = 1,
            vehDescription = "Average Car",
            vehValCriteria = new List<stepsList>()
            {
                new stepsList()
                {
                    steps = "Move car",
                    stepChannelsCriteria = new List<movChannels>()
                    {
                        new movChannels()
                        {
                            name = "engage firstgear",
                            criteria = new List<criterias>()
                            {
                                new criterias()
                                {
                                    values = 1,
                                    time = 1
                                },
                            }
                        },
                        new movChannels()
                        {
                            name = "reach 10kph",
                            criteria = new List<criterias>()
                            {
                                new criterias()
                                {
                                    values = 10,
                                    time = 5
                                },
                            }
                        },
                        new movChannels()
                        {
                            name = "maintain 10kph",
                            criteria = new List<criterias>()
                            {
                                new criterias()
                                {
                                    values = 10,
                                    time = 12
                                },
                            }
                        }
                    }
                },
                new stepsList()
                {
                    steps = "stop car",
                    stepChannelsCriteria = new List<movChannels>()
                    {
                        new movChannels()
                        {
                            name = "reach okph",
                            criteria = new List<criterias>()
                            {
                                new criterias()
                                {
                                    values = 10,
                                    time = 4
                                },
                            }
                        },
                        new movChannels()
                        {
                            name = "put in neutral",
                            criteria = new List<criterias>()
                            {
                                new criterias()
                                {
                                    values = 0,
                                    time = 1
                                },
                            }
                        },
                        new movChannels()
                        {
                            name = "turn off vehicle",
                            criteria = new List<criterias>()
                            {
                                new criterias()
                                {
                                    values = 0,
                                    time = 0
                                },
                            }
                        }
                    }
                }
            }
        };

答案 4 :(得分:0)

您可以通过从上到下移动来填充列表,例如

  • 创建标准列表,然后创建movChannel对象并添加该列表 到Criterias对象等等

但是如果你想避免这种方式,还有另外一种方法。如果您使用的是Linq To List,请按照

进行操作

获取一个简单的平面对象到列表对象

var TableData = db.Tablename.Tolist(); 

然后像这样填写你自己的对象

Vehicles finalList = TableData.Select(a => new Vehicles()
{
    vehID = a.Id,
    vehDescription = a.des,
    vehValCriteria = TableData.Where(b => b.StepslistId == a.StepslistId)
    .Select(c => new StepsList()
    {
                steps = c.Steps,
                stepChannelsCriteria = TableData.Where(d => d.channelId == c.channelId)
                .select(e => new MovChannels()
                {
                    name = e.name,
                    criteria = TableData.Where(f => f.criteriasId = e.criteriasId)
                    .Select(g => new Criterias()
                    {
                        values = g.Values,
                        time = g.Time

                    }).ToList()
                }).ToList()
         }).ToList()
    }).ToList();

这是在列表中填写列表的标准方法