2016-06-11 1 views
0

J'essaie d'aller chercher des données à partir de la base de données SQL et je reçois 5 enregistrements. Mais à partir de cette liste d'enregistrements, je veux créer deux listes séparément. Je suis en train de le faire une ci-dessous:Comment ajouter des données dans la liste de collection dans C#

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

Mes deux autres modèles sont les suivants:

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

je voudrais peupler les listes définies dans ParentModel de mon service mais il jette exception null . Comment puis-je ajouter des données dans mes listes?

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

Répondre

1

Il existe plusieurs méthodes. Le moyen le plus simple consiste à ajouter un constructeur

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

C'est génial. Cela fonctionne bien. pourriez-vous s'il vous plaît expliquer pourquoi ces propriétés doivent être créées avec de nouvelles ou pourquoi il est nécessaire d'allouer de la mémoire aux propriétés en premier. Pour autant que je sache, nous pouvons utiliser n'importe quelle propriété de classe sans utiliser new avec le constructeur. – Sweetie

+1

est correct et la propriété correcte est renvoyée. Toutefois, child1 et chil2 sont tous les deux NULL lors de la première initialisation, et vous ne pouvez pas appeler .Add sur un objet nul. – DevilSuichiro

+1

Ce sont des objets liste et le {get; set} n'initialise pas les listes. – jdweng