2013-06-11 2 views
-1

У меня есть форма с gridview, при выборе записи из GV она вызывает другую страницу details.aspx, подробная страница имеет форму с FormView с использованием SelectMethod = "GetData", чтобы отображать данные для выбранной записи идентификатора, последующий:Как улучшить этот код (LINQ to Entity)

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() 

       Return _db.DbSet_Candidates.Find(id) 

      Catch ex As Exception 
       ModelState.AddModelError("ModelError", ex.Message.ToString) 
       Return 1 
      End Try 
End Function

в то же время, когда данные переплетены в FormView я должен был показать некоторые данные в метке из этой записи, но вне модели FormView, я имел обновите приведенный выше метод следующим образом:

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

      Call LoadCandidateImage() 

    // Start: new lines added 
      Dim objQuery As IQueryable(Of Ems_Candidate) = _ 
       From c In _db.DbSet_Candidates 
       Where c.CandidateID = id 
       Select c 

      For Each c In objQuery 
       If c.CandidateStatus.Equals("A") Then 
        Me.lblCandidateStatus.Text = "Active" 
       ElseIf c.CandidateStatus.Equals("D") Then 
        Me.lblCandidateStatus.Text = "Deleted" 
       ElseIf c.CandidateStatus.Equals("W") Then 
        Me.lblCandidateStatus.Text = "Waived" 
       Else 
        Me.lblCandidateStatus.Text = "N/A" 
       End If 
      Next 

    // End: new lines added 

      Return _db.DbSet_Candidates.Find(id) 

     Catch ex As Exception 
      ModelState.AddModelError("ModelError", ex.Message.ToString) 
      Return 1 
     End Try 
End Function

Мне пришлось запросить базу данных снова как IQueryable, чтобы иметь возможность выбирать необходимые данные до того, как я верну данные.

Я не думаю, что этот способ практично ударить базу данных дважды в одном месте, даже если бы я не использовал это, если я использую Ado.Net, есть ли способ улучшить код?

Спасибо за помощь.

ответ

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 
+0

Спасибо, отлично работает. – adscnet

Смежные вопросы