-1

我有一个带有 gridview 的表单,当从 GV 中选择一条记录时,它会调用另一个页面 details.aspx,详细信息页面有一个带有 FormView 的表单,使用 SelectMethod="GetData" 来显示所选 id 记录的数据,如下所示:

公共函数 GetData(ByVal id?As Integer) As Ems_Candidate
            尝试
                // 将记录 id 存储在 memVar 中,以便在检索图像时使用它
                strRecNo = id.ToString

                调用 LoadCandidateImage()

                返回 _db.DbSet_Candidates.Find(id)

            抓住前任作为例外
                ModelState.AddModelError("ModelError", ex.Message.ToString)
                返回 1
            结束尝试
结束功能

在绑定到 FormView 的数据的同时,我必须在标签中显示来自该记录但在 FormView 模型之外的一些数据,我已将上述方法更新为以下内容:

公共函数 GetData(ByVal id?As Integer) As Ems_Candidate
        尝试
            // 将记录 id 存储在 memVar 中,以便在检索图像时使用它
            strRecNo = id.ToString

            调用 LoadCandidateImage()

    // 开始:添加新行
            Dim objQuery As IQueryable(Of Ems_Candidate) = _
                从 c 中的 _db.DbSet_Candidates
                其中 c.CandidateID = id
                选择 c

            对于objQuery中的每个c
                如果 c.CandidateStatus.Equals("A") 那么
                    Me.lblCandidateStatus.Text = "活动"
                ElseIf c.CandidateStatus.Equals("D") Then
                    Me.lblCandidateStatus.Text = "已删除"
                ElseIf c.CandidateStatus.Equals("W") Then
                    Me.lblCandidateStatus.Text = "放弃"
                别的
                    Me.lblCandidateStatus.Text = "不适用"
                万一
            下一个

    // 结束:添加新行

            返回 _db.DbSet_Candidates.Find(id)

        抓住前任作为例外
            ModelState.AddModelError("ModelError", ex.Message.ToString)
            返回 1
        结束尝试
结束功能

在返回数据之前,我必须再次以 IQueryable 的形式查询数据库,以便能够选择所需的数据。

我认为这种方式在同一个地方两次访问数据库是不切实际的,即使我使用 Ado.Net 也不会这样做,有没有办法增强代码?

谢谢您的帮助。

4

1 回答 1

0

将查询的结果放入一个临时变量中,像这样

Public Function GetData(ByVal id? As Integer) As Ems_Candidate
    Try
        // store record id in memVar to use it when retreve the image
        strRecNo = id.ToString

        Call LoadCandidateImage()

        Dim result As Ems_Candidate
        result = _db.DbSet_Candidates.Find(id)

        Select Case result.CandidateStatus
            Case "A"
                Me.lblCandidateStatus.Text = "Active"
            Case "D"
                Me.lblCandidateStatus.Text = "Deleted"
            Case "W"
                Me.lblCandidateStatus.Text = "Waived"
            Case Else
                Me.lblCandidateStatus.Text = "N/A"
        End Select

        Return result

    Catch ex As Exception
        ModelState.AddModelError("ModelError", ex.Message.ToString)
        Return 1
    End Try
End Function
于 2013-06-11T22:29:32.557 回答