2016-05-17 10 views
1

テーブルの次のデータをVehiclesというリストに追加するにはどうすればよいですか?今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文字列されていると(例 "XPT")をint型なかったはずです
  2. ムーブメントは、名前、値、および時間を持っています。値と時刻のリストはありません。

作成:

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

はタイプバリデューを使用できません。理由は分かりません。 – 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はString型である、あなたのテーブルに思えます。 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

あなたは

  • のようなのcriteriasのリストを作成し、上から下に移動することによって、あなたのリストを埋めることができますmovChannelオブジェクトを作成してそのリストを追加する をCriteriasオブジェクトに追加するなど

この方法を避け、別の方法があります。リストにはLINQのを使用している場合は、これが埋めるための標準的な方法です。この

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

のように、独自のオブジェクトを塗りつぶすリストオブジェクトに、単純なフラットなオブジェクトを取得します続きますリスト内のリスト

関連する問題