2016-05-17 91 views
1

如何将以下数据添加到名为车辆的列表中?C# - 将数据添加到列表内部列表

enter image description here

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

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

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

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

现在,我怎么能补充一点,我在出到一个名为车辆名单表中的数据?我稍后会造成其他车辆...

+1

开始初始化'车辆'实例并设置其'vehID'和'vehDescription'。然后创建'stepsList'实例并将其添加到'vehValCriteria'' List'等。 –

回答

2

你有几个不好的决定,有些是设计缺陷,有些是C#命名违反规则。

夫妇身价提到的缺陷:

  1. vehID应该是一个,而不是INT(举例 “XPT”)
  2. Movment有名称,值和时间。它没有值和时间的列表。

创作:

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

不能使用var类型我不知道为什么 – peetman

+0

@peetman,代码已更新。 (在最后加上'vehicles.Add(...);')。 –

+0

谢谢。如果我对每个运动都有一个以上的标准,我是否应该像问题中提出的那样,用另一个班级来代替价值观和时间? – peetman

0

您应该创建像下面的类:

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; } 
} 
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); 
    } 
} 
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 
           }, 
          } 
         } 
        } 
       } 
      } 
     }; 
0

您可以通过从顶部到底部移动填补你的列表,像

  • 创建指标分析表然后创建movChannel对象并将该列表 添加到Criterias对象等等

但是,如果您想要避免这种方式,还有另一种方式。如果您在使用LINQ to名单,然后按照这个

得到一个简单的平面物体到一个列表对象

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

这是填补标准的方式列表内的列表