【问题标题】:Problem while updating a child list in C # ASP.Net MVC在 C# ASP.Net MVC 中更新子列表时出现问题
【发布时间】:2019-07-04 15:56:19
【问题描述】:
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;

}

【问题讨论】:

  • 你想随机更新(或)哪一个?
  • 这是什么 => FirstOrDefaulttt() 我没有看到任何具有此名称的 Func !
  • 我只想更新乘数列表的第一个元素,但它正在更新所有元素。
  • 再次检查我已经编辑了代码。有错别字

标签: c# asp.net-mvc collections


【解决方案1】:

根据您向我们展示的内容,我认为您正在上面的某个地方创建 rate_list,例如 rate_list = new RateList(...),并且您将其设置为以 days.multiplier = rate_list; 为单位的所有日子。由于您没有为每个元素重新创建该 rate_list,因此无论何时您在其中一个 dayExists 中更改它,您也会为所有其他元素更改它。所以你应该这样做 days.multiplier = new RateList(...);

查看此链接:Updating child items in List updates all Items in C#

【讨论】:

    【解决方案2】:

    我看不出有什么理由让它不起作用。你确定你以正确的方式测试它吗?

    我认为改进代码并测试空值会更好:

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

    【讨论】:

    • 检查我的编辑。我试图更准确地解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2017-11-10
    • 2022-10-23
    相关资源
    最近更新 更多