我正在尝试使用数据库中的值计算折旧值并在网格中显示。
该表有3列。 Id,DepreciationRate,DateDepreciated。为了获得开盘价,我从另一张表中提取成本。我的问题是如何仅使用费率来计算和显示每个折旧。我们会存储新值,但折旧可以删除或添加到不同的日期。
实施例。我们有一个成本为10美元的项目,并添加10%的折旧。新价值是9美元。我们再增加2个折旧,每个折扣5%,价值8.12美元。然后我们删除5%折旧中的一个,因此该值现在应显示为$ 8.55。
网格中的一列将显示折旧前的值。
无论如何计算LINQ中的新值?也许聚合?
我正在使用带有LINQ to SQL的VB.net
答案 0 :(得分:2)
如果我得到你的漂移,请尝试以下方法:
Dim result = db.InitialCosts _
.GroupJoin( _
db.Depreciations, _
cost => cost.ProductID, _
depr => depr.ProductID, _
(cost,g) => New With { _
.OriginalCost = cost.Cost, _
.DepreciatedCost = g.Aggregate( _
cost.Cost, _
(cost,rate) => cost * (1- rate.DepreciationRate)) _
})
或者,如果需要很长时间,可以尝试在本地内存中进行连接:
Dim rawGroups = db.Depreciations _
.ToLookup(depr => depr.ProductID, depr => depr.DepreciationRate)
Dim result = db.InitialCosts _
.Select( _
cost => New With { _
.OriginalCost = cost.Cost, _
.DepreciatedCost = rawGroups.Contains(cost.ProductID) ? _
rawGroups[cost.ProductID].Aggregate( _
cost.Cost, _
(cost,rate) => cost * (1- rate)) _
: cost.Cost _
})