1

次のLINQステートメントを実行しようとしています。

Dim jobId As Integer = CInt(payment.ForJob)

Dim currentPaid = From a In db.Payments
                      Where a.ForJob = jobId
                      Select a.Amount

ただし、a.Amountで次のエラーが発生します。範囲変数'Amount'は、囲んでいるブロック内の変数、またはクエリ式で以前に定義された範囲変数を非表示にします。

Function RecordPaymentForJob(payment As Payment) As ActionResult
        If ModelState.IsValid Then

            Dim jobId As Integer = CInt(payment.ForJob)

            Dim new currentPaid = From a In db.Payments
                      Where a.ForJob = jobId
                      Select a.Amount

            Dim totalPaid As Double = currentPaid.Sum()

            If (totalPaid + payment.Amount) > (db.Jobs.Find(payment.ForJob).JobAmount * -1) Then
                db.Jobs.Find(payment.ForJob).JobStatus = "Paid"
            Else
                db.Jobs.Find(payment.ForJob).JobStatus = "Part Paid"
            End If

            Dim Id As Integer = payment.CustomerId
            Dim amount As Double = db.Customers.Find(Id).AccBalance
            amount += payment.Amount
            db.Customers.Find(Id).AccBalance = amount
            db.Payments.Add(payment)
            db.SaveChanges()
            Return Redirect("/Payment/PaymentSuccessful")
        End If

        Return View(payment)
    End Function
4

1 に答える 1

4

これが問題だと思います:

Dim amount As Double = db.Customers.Find(Id).AccBalance

VBについてはよくわかりませんが、この変数のスコープは、そのLINQステートメントを含むブロック全体のスコープであると思われます。少なくともC#では、それは問題にはなりません...しかし、SelectVBの句の動作は多少異なると思います。

1つの代替方法は、合計を直接計算することです。

Dim totalPaid = db.Payments.Where(Function(a) a.ForJob = jobId).
                            Sum(Function(a) a.Amount)

私のVBはかなり貧弱ですが、うまくいくはずです。

于 2012-09-28T08:57:57.530 に答える