2016-06-11 8 views
0

Я пытаюсь извлечь данные из базы данных SQL, и я получаю 5 записей. Но из этого 5 списков записей я хочу создать два списка отдельно. Я пытаюсь сделать это ниже:Как добавить данные в список коллекции в C#

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

Мои другие две модели:

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

Я хотел бы, чтобы заполнить как списки, определенные в ParentModel из моей службы, но она бросает пустое исключение , Как я могу добавить данные в свои списки?

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 при первом инициализации, и вы не можете вызвать .Add на нулевом объекте. – DevilSuichiro

+1

Это объекты списка, а {get; set} не инициализирует списки. – jdweng