【发布时间】:2020-02-07 07:01:20
【问题描述】:
作为实体框架、LINQ 和 C# 的新手,我不知道如何更改嵌套列表中变量的值。我知道 LINQ 并不意味着更新对象,但我在某处读到你可以以某种方式做到这一点,这就是我在这里尝试的。我对任何解决方案都很满意。
假设我们有两个列表,myData 包含当前月份的数据,myDataBefore 包含上个月的相同列表。我想更新myData。更具体地说,我想更改(在 SQL 中你会说 UPDATE)valuePrevMonth 和 deltaPercentage 用于该列表中的所有 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
}
参考文献
- https://stackoverflow.com/a/14729289/8330162 - 查询意味着读不写的引用来自那里
- LINQ nested (inner) JOIN does not join children - 我的另一个问题导致我在这里遇到这个问题
【问题讨论】:
标签: c# entity-framework linq