代码之家  ›  专栏  ›  技术社区  ›  Zeus

在循环后提交更改-仅保存最后一条记录

  •  0
  • Zeus  · 技术社区  · 9 年前

    下面的代码可以工作,但它只保存循环中的最后一条记录,我不知道为什么。我认为 Submitchanges() 在正确的位置,在循环的末尾。有人能告诉我怎么了吗?谢谢

    Sub POPULATE_CHAIN()
    
        Dim newChain As New CHAIN
        Dim dpSTRIKE As Integer
    
        'get list of Options Contracts
        Dim lstOPT = From Z In DATA.OPTIONs, X In DATA.UDLies
                     Where X.UDLY_SYM = Z.UDLY_SYM
                     Select Z.CONTRACT, Z.STRIKE_GAP, X.UDLY_LAST
    
        Dim dctOPT = lstOPT.ToDictionary(Function(Z) Z.CONTRACT)
    
        For Each key In dctOPT.Keys
    
            For COUNT = 1 To 5
                dpSTRIKE = 1850 + 5 * COUNT
                Dim lkup = From Z In DATA.CHAINs
                           Select Z
                Dim RCD_EXISTS As Boolean = lkup.Any(Function(Z) Z.CONTRACT = dctOPT(key).CONTRACT And Z.P_C = "C" And Z.STRIKE = dpSTRIKE)
    
                If RCD_EXISTS = False Then
                    newChain.CONTRACT = dctOPT(key).CONTRACT
                    newChain.P_C = "C"
                    newChain.STRIKE = dpSTRIKE
                    DATA.CHAINs.InsertOnSubmit(newChain)
                Else
                    newChain.CONTRACT = dctOPT(key).CONTRACT
                    newChain.P_C = "C"
                    newChain.STRIKE = dpSTRIKE
                End If
    
            Next
        Next
        DATA.SubmitChanges()
    End Sub
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   Shukri Gashi    9 年前
    Dim newChain As New CHAIN
    

    应该在Fore Each内,正好在Fore second内。 因为它是在循环外声明的,所以它将从表中分离出来,并再次附加到表中。所以它将只插入最后一行。