Linq to SQL - обновлять вычисляемое поле (например, «промежуточный итог») родительского объекта при изменении дочерних объектов. - PullRequest
0 голосов
/ 13 апреля 2009

У меня есть сущность L2S SalesOrder с дочерним набором LineItems. Используя winforms, в моей форме заказа на продажу у меня есть сетка данных, привязанная к LineItems, и она работает как сон. Если пользователь изменяет количество LineItem (например), мой частичный класс LineItem обрабатывает OnQuantityChanged и пересчитывает поле SubTotal LineItem, и сетка автоматически обновляется. Я в восторге от того, насколько он чист и опрятен.

Теперь я хотел бы иметь вычисляемое поле для моего объекта SalesOrder с именем «Итого», которое является суммой всех полей SubTotal LineItems (плюс некоторые другие вещи, такие как налог и доставка, но не беспокойтесь об этом для сейчас). Каков наилучший / самый чистый способ автоматического обновления поля Total в SalesOrder при каждом изменении LineItem? Если бы кто-то мог просто указать мне правильное направление, я был бы очень признателен.

Не знаю, если это что-то меняет, но я использую Бизнес-каркас Linq To SQL Рика Страля (и это здорово, кстати!).

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 мая 2009

Это было на самом деле проще, чем я думал. Я добавил 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
0 голосов
/ 13 апреля 2009

Вы можете проверить Bindable LINQ :

Bindable LINQ - это набор расширений в LINQ, которые добавляют привязку данных и изменить возможности распространения на стандартные запросы LINQ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...