Linq to SQL - 当子对象更改时,更新父对象上的计算字段(如“小计”)

时间:2009-04-13 18:14:25

标签: linq-to-sql

我有一个带有子集LineItems的L2S SalesOrder实体。使用winforms,在我的销售订单表单上,我有一个绑定到LineItems的datagridview,它就像一个梦想。如果用户更改LineItem数量(例如),我的LineItem分部类将处理OnQuantityChanged并重新计算LineItem SubTotal字段,并自动更新网格。它是多么干净和整洁,我欣喜若狂。

现在我想在SalesOrder对象上有一个名为“Total”的计算字段,它是所有LineItems的SubTotal字段的总和(加上一些其他的东西,如税和运费,但不要担心现在)。每当LineItem发生变化时,SalesOrder的Total字段可以自动更新的最佳/最干净方式是什么?如果有人能指出我正确的方向,我会非常感激。

不知道它是否有所作为,但我正在使用Rick Strahl's Linq To SQL business framework(这太棒了,BTW!)。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可能需要查看Bindable LINQ

  

Bindable LINQ是一组扩展   到LINQ,添加数据绑定和   将传播能力改为   标准LINQ查询。

答案 1 :(得分:0)

这实际上比我想象的要容易。我将ReCalculate()添加到我的SalesOrder然后我可以从我的LineItem中调用它,就像这样......

Partial Class SalesOrderLineItem
    Private Sub OnQuantityChanged()
        RefreshMySubTotal()
    End Sub
    Private Sub OnUnitPriceChanged()
        RefreshMySubTotal()
    End Sub
    Private Sub RefreshMySubTotal()
        Dim dNewSubtotal As Decimal = 0
        dNewSubtotal = Me.Quantity * Me.UnitPrice * (1 - (Me.Discount * 0.01))
        If Me.SubTotal <> dNewSubtotal Then
            Me.SubTotal = dNewSubtotal
            If Me.SalesOrder IsNot Nothing Then Me.SalesOrder.ReCalculate()
        End If
    End Sub