Проблема при обновлении дочернего списка в C # ASP.Net MVC - PullRequest
0 голосов
/ 11 февраля 2019
public class PayRateDaysModel   
{
    public string day_name { get; set; }
    public List<RateList> multiplier { get; set; }
}
public class RateList
{
    public double start_after { get; set; }
    public double rate_multiplier { get; set; }
}

daysModel - это список типа PayRateDaysModel.Когда я пытаюсь обновить множитель в текущем объекте списка daysModel, т.е. dayExists, то его множитель обновления во всех элементах списка daysModel.Я хочу обновить только в текущем пункте.

Ниже мой код:

var dayExists = daysModel.Where(x => x.day_name == day_name).FirstOrDefault();

if(dayExists==null)
{
    PayRateDaysModel days = new PayRateDaysModel();
    days.day_name = day_name;
    days.multiplier = rate_list;
    daysModel.Add(days);
}
else
{
    //update
    dayExists.day_name = "abc";               
    dayExists.multiplier.FirstOrDefault().rate_multiplier = 1;

}

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Исходя из того, что вы показали нам, я думаю, что вы создаете rate_list где-то выше, например, rate_list = new RateList (…), и вы устанавливаете его на все свои дни в days.multiplier = rate_list ;.Поскольку вы не воссоздали этот rate_list для каждого элемента, каждый раз, когда вы изменяете его в одном из ваших dayExists, вы меняете его и для всех остальных.Поэтому вы должны сделать что-то вроде этого days.multiplier = new RateList (…);

Проверьте эту ссылку: Обновление дочерних элементов в Списке обновляет все элементы в C #

0 голосов
/ 11 февраля 2019

Не вижу причин, чтобы это не сработало.Вы уверены, что тестируете его правильно?

Я думаю, что будет лучше улучшить код и проверить нулевое значение:

    var dayExists = daysModel.Where(x => x.day_name == day_name).FirstOrDefault();
        if(dayExists==null)
        {
               PayRateDaysModel days = new PayRateDaysModel();
               days.day_name = day_name;
               days.multiplier = rate_list;
               daysModel.Add(days);
        }
        else
        {
           //update
           dayExists.day_name = "abc";     
          var firstMultiplier= dayExists.multiplier.FirstOrDefault();
          if( firstMultiplier!=null)
          { 
              firstMultiplier.rate_multiplier = 1;
          }

         }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...