1

我正在尝试使用数据库中的值计算折旧值并显示在网格中。

该表有 3 列。ID、折旧率、折旧日期。为了获得开盘价,我从另一个表中提取成本。我的问题是如何仅使用费率计算和显示每次折旧。我们将存储新值,但可以在不同日期删除或添加折旧。

前任。我们有一个成本为 10 美元的项目,并加上 10% 的折旧。新价值为 9 美元。我们再增加 2 个折旧,每个 5%,使价值 8.12 美元。然后我们删除 5% 折旧的其中之一,因此该值现在应显示为 8.55 美元。

网格中的一列将显示折旧前的值。

无论如何要计算LINQ中的新值吗?也许聚合?

我正在使用带有 LINQ to SQL 的 VB.net

4

1 回答 1

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 _
                                   })
于 2012-11-08T18:37:37.193 回答