【问题标题】:How to change the value of a variable within a child of a nested list如何更改嵌套列表的子项中的变量值
【发布时间】:2020-02-07 07:01:20
【问题描述】:

作为实体框架、LINQ 和 C# 的新手,我不知道如何更改嵌套列表中变量的值。我知道 LINQ 并不意味着更新对象,但我在某处读到你可以以某种方式做到这一点,这就是我在这里尝试的。我对任何解决方案都很满意。

假设我们有两个列表,myData 包含当前月份的数据,myDataBefore 包含上个月的相同列表。我想更新myData。更具体地说,我想更改(在 SQL 中你会说 UPDATEvaluePrevMonthdeltaPercentage 用于该列表中的所有 1 级子级 - 其他所有内容都应保持不变。我尝试了以下方法,但这并没有达到预期的效果。

var myChildren = myData.SelectMany(x => x.children).ToList();
foreach (var child in myChildren)
  {
     var valuePrevMonth = myDataBefore.SelectMany(x => x.children)
                           .Where(x => (x.PositionId == child.PositionId && 
                                        x.SubPositionId == child.SubPositionId))
                           .Select(x => x.Value).FirstOrDefault();
     // now comes the write-back step which I am probably messing up
     myData.SelectMany(x => x.children)
            .Where(x => (x.PositionId == child.PositionId &&
                         x.SubPositionId == child.SubPositionId))
            .Select(x => { 
                 x.previousValue = valuePrevMonth;
                 x.deltaPercentage = (x.Value - valuePrevMonth) / valuePrevMonth; // probably some IF-NULL check would not hurt
                 return x;
               }).ToList();
  }

最后一个.Select(..) 是我目前对如何更新给定子对象的这两个值的理解。

一些背景

我的嵌套列表List<myData> 的格式如下(请允许我使用某种伪代码进行定义):

myData 
    {
        int? PositionId 
        string PositionName 
        int SubPositionId 
        string SubPositionName
        myObject children 
        decimal? Value
        decimal? previousValue 
        decimal? deltaPercentage 
    }

参考文献

【问题讨论】:

    标签: c# entity-framework linq


    【解决方案1】:

    我的第一个想法是,您以.SelectMany(x => x.Children) 开头的第二个语句可能是不必要的;如果我没看错,您要更新的内容已经在 child 变量中,所以您只需这样做:

    child.previousValue = valuePrevMonth;
    ...
    

    也就是说,您的myObject 类型是struct 还是class 可能很重要;如果它是struct,则更新其字段不会满足您的要求,因为您将在副本上进行操作。要更新 structs 列表的元素,您必须获取所需的更新后的 struct 值(例如,通过在值的副本上设置字段),然后使用 list[x] = updatedValue; 更新整个列表元素.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-17
      • 2015-05-03
      • 1970-01-01
      • 2011-09-06
      • 2021-04-21
      • 2012-05-26
      • 2017-06-10
      相关资源
      最近更新 更多