2012-11-08 61 views
1

我試圖使用數據庫中的值計算折舊值並顯示在網格中。使用LINQ來計算折舊

該表有3列。 Id,DepreciationRate,DateDepreciated。爲了獲得開放價值,我從另一個表中扣除了成本。我的問題是如何計算和顯示每個折舊只使用率。我們會存儲新的價值,但折舊可以刪除或添加不同的日期。

Ex。我們有一個成本爲10美元的項目,並添加10%的折舊。新的價值是9美元。我們再增加2個折舊,每個折舊5%,價值8.12美元。然後,我們刪除5%折舊中的一個,所以現在該值應該顯示爲8.55美元。

網格中的一列將顯示折舊前的值。

無論如何要計算LINQ中的新值嗎?也許聚合?

我使用的VB.net與LINQ到SQL

+3

歡迎來到SO。但你有什麼嘗試?你能分享一些你的工作嗎? –

回答

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 _ 
            }) 
+0

謝謝。這工作 – user1810126