2016-06-11 5 views
0

SQLデータベースからデータを取得しようとしていますが、5つのレコードがあります。しかし、その5つのレコードのリストから、別々に2つのリストを作成したいと思います。私は以下のことをやろうとしています:Cのコレクションリストにデータを追加する方法

public class ParentModel 
{  
    public List<Model1> Child1 { get; set; } 
    public List<Model2> Chil2{ get; set; } 
} 

私の他の2つのモデルがある:私は 私のサービスからParentModelで定義されたリストの両方を移入したい

public class Model1 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int? GroupNumber { get; set; } 
    public string Description { get; set; } 
} 

public class Model2 
{ 
    public string Name { get; set; } 
    public int? Number { get; set; } 
} 

それがnull例外がスローされます。リストにデータを追加するにはどうすればよいですか?

public ParentModel GetALL(int ID) 
{ 
    ParentModel objModel = new ParentModel(); 

    // here I fetch data from database using Iqueryable: 
    IQueryable<Products> List = this._products.GetAll(); 
    var NamesList = List .Where(m => m.Id == ID).ToList(); 

    // Here I need to add data to my list. Also if it can be 
    // followed in a best possible way, Please do share it with me. 

    foreach (var obj in NamesList) 
    { 
     objModel.Child1.Add(new Model1 
     { 
      Id=obj.Id, // Here it throws error of null exception 
      Name = obj.Name, 
      GroupNumber = obj.GroupNumber, 
      Description =obj.Description 
     }); 

     // the other list I would like to populate at the same time is 
     objModel.Chil2.Add(new Model2 
     { 
      Name = obj.Name, 
      Number = obj.Number 
     }); 
    } 
} 

答えて

1

いくつかの方法があります。最も簡単な方法はコンストラクタを追加することです

public class ParentModel 
    { 

     public List<Model1> Child1 { get; set; } 

     public List<Model2> Chil2 { get; set; } 

     public ParentModel() 
     { 
      Child1 = new List<Model1>(); 
      Chil2 = new List<Model2>(); 
     } 

    } 
+0

これは素晴らしいです。それは正常に動作しています。これらのプロパティを新しいもので作成する必要がある理由、またはプロパティを先にメモリに割り当てる必要がある理由について説明してください。私が知る限り、コンストラクタでnewを使わずにクラスの任意のプロパティを使うことができます。 – Sweetie

+1

が正しく、正しいプロパティが返されます。ただし、最初に初期化されたときにchild1とchil2の両方がNULLになり、nullオブジェクトで.Addを呼び出すことはできません。 – DevilSuichiro

+1

これらはリストオブジェクトであり、{get; set}はリストを初期化しません。 – jdweng

関連する問題