Будучи новым, довольно новым для сущности, 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
}
Ссылки