我有这个数据的StationStateItem
表:
Id SSHdrRef Amount
---------------------------
1 1(forrein Key) 1
2 1 1
3 2 2
4 2 2
5 3 1
我希望在StationStateHdr
中更改金额时更新StationStateItem
表。
BeforeSSAmount=StationStateHdr.StationStateItem.Sum(x=> x.Amount)
StationStateHdr
表格如下:
Id BeforeSSAmount
--------------
1 0
2 2 (1+1)
3 6 (1+1+2+2)
答案 0 :(得分:2)
尝试代码
foreach(var a in StationStateHdr)
{
a .BeforeSSAmount=StationStateHdr.StationStateItem.where(c=>c.SSHdrRef<a.id).Sum(x=> x.Amount)
}
答案 1 :(得分:1)
试试这段代码:
var afters = ctx.headers.SkipWhile(((x, index) => index <= currentItemIndex))
.TakeWhile((x, index) => index != ctx.headers.Count()-1).ToList();
for (int i = currentItemIndex+1, j=0; j < afters.Count; i++ ,j++)
{
var befores = ctx.headers.TakeWhile((x, index) => index <i);
afters[j].BeforeSSAmount = befores.SelectMany(x => x.StationStateItem).Sum(x => x.Amount);
}
在wpf:
中编辑使用ListCollectionView var afters = header.DataSource.Cast<StationStateHdr>().SkipWhile(((x, index) => index <= header.DataSource.CurrentPosition))
.TakeWhile((x, index) => index != header.DataSource.Cast<StationStateHdr>().Count()-1).ToList();
for (int i = header.DataSource.CurrentPosition+1, j=0; j < afters.Count; i++ ,j++)
{
var befores = header.DataSource.Cast<StationStateHdr>().TakeWhile((x, index) => index <i);
afters[j].BeforeSSAmount = befores.SelectMany(x => x.StationStateItem).Sum(x => x.Amount);
}
或本代码:
var listOfStationStateHdr = header.DataSource.Cast<StationStateHdr>();
listOfStationStateHdr.SkipWhile(((x, index) => index <= header.DataSource.CurrentPosition))
.TakeWhile((x, index) => index != header.DataSource.Cast<StationStateHdr>().Count() - 1).ToList().ForEach(x =>
{
x.BeforeSSAmount = listOfStationStateHdr.TakeWhile(y => y.Id < x.Id).SelectMany(b => b.StationStateItem).Sum(s => s.Amount);
});
或
var sumCurrent = CurrentStationStateHdr.StationStateItem.Sum(t => t.Amount);
var listOfStationStateHdr = header.DataSource.Cast<StationStateHdr>().ToList();
double? nextItembeforeSSAmount = listOfStationStateHdr[header.DataSource.CurrentPosition + 1].BeforeSSAmount;
listOfStationStateHdr.SkipWhile(((x, index) => index <= header.DataSource.CurrentPosition))
.TakeWhile((x, index) => index != header.DataSource.Cast<StationStateHdr>().Count() - 1).ToList().ForEach(x =>
{
x.BeforeSSAmount += sumCurrent - nextItembeforeSSAmount;
});