Home > Mobile >  Add element to a List when delcaring new object
Add element to a List when delcaring new object

Time:08-11

Is there a way to add elements to a List when doing this:

var Foo = new MyClass() { 
    PropertyList = MyList,
    Id = Id,
  }

I would like to add elements to PropertyList. For example would be the same as: MyList.Add()

The problem is that i do not have a list called MyList but i rather have elements that i want to append to PropertyList


Updating code based on comments:

var result1 = await query
  .GroupBy(c => new {
    c.CommissionId, c.ActivityId
  })
  .Select(grp => new RegistrationStatisticViewModel() {
    CommissionId = grp.Key.CommissionId,
      CommissionCode = grp.First().Commission.Code,
      CommissionDescription = grp.First().Commission.Description,
      MinuteWorked = grp.Sum(c => c.MinuteWorked),
      ActivityId = grp.Key.ActivityId,
      ActivityCode = grp.First().Activity.Code,
      ActivityDescription = grp.First().Activity.Description,
  })
  .ToListAsync();

var grps = from d in result1
group d by d.CommissionId
into grp
select new RegistrationStatisticViewModel() {
  CommissionId = grp.Key,
    ActivityList = new List < Activity > {
      new Activity {
        //ActivityId = grp.Select(d => d.ActivityId),
        //Code = grp.Select(d => d.ActivityCode),
        //Description = grp.Select(d => d.ActivityDescription),
      }
    },
    CommissionCode = grp.First().CommissionCode,
    CommissionDescription = grp.First().CommissionDescription,
    MinuteWorked = grp.First().MinuteWorked
};
return grps;

To give context:

  • forget the result1 is just some data i retrieve from my database
  • Commission is one class and contains:
    • CommissionId
    • Code
    • Description
  • Activity is one class and contains:
    • ActivityId ==> type GUID
    • Code ==> type string
    • Description ==> type string

Now the var = grps is a LINQ that gets the data and then instatiates a new object (class) new RegistrationStatisticViewModel()

So the tricky part we were discussing before is when i populate ActivityList with multiple activities.

When populating the list if i use .First() or .Select() i would only get one instance and therfore the list would only have one activity.

It worked when using .ToArray() for example if i replace ActivityList with just the ActivityId of type string (so a new property on RegistrationStatisticViewModel that is not a list anymore):

I can do this ActivityId = grp.Select(d2 => d2.ActivityId).ToArray()

And it will give me an array of all the ActivityId linked to that commissionId

I am sorry if this is confusing but it is for me as well. I would thank you if you could help me. No worries if you can't you have already give me very helpful answers, so i thank you for that!

CodePudding user response:

Based on your remarks, I believe this is what you are trying to achieve:

public class PersonContainer
{
    public IList<Person> Persons { get; set; }
}

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

var personContainer = new PersonContainer
{
    Persons = new List<Person>
    {
        new Person
        {
            Name = "John Doe",
            Age = 28,
        },
        new Person
        {
            Name = "Jane Doe",
            Age = 27,
        },
    }           
};

Here, the Persons property of PersonContainer is initialized and populated with Person elements during instantiation.

  • Related