如何在不使用列表的情况下将值从视图模型传递到控制器?

时间:2017-02-01 10:09:11

标签: sql-server vb.net asp.net-mvc-viewmodel

继续我之前的问题,我将id值从'Lookup'控制器传递给另一个控制器方法'Charges'。

Function Charges(id As String) As ActionResult
        Dim Patient As New LookupVM()

        Patient.GetHistory(paid)

        Return View(Patient)
End Function

在视图模型中,我有GetHistory(id)列表方法,listProcedure是包含我想要传递回控制器的值的列表,以便在视图中显示。

Public Property listProcedure As List(Of LookupVM)

Public Function GetHistory(id As String) As List(Of LookupVM)
    Using db As New DbContext()

        ' SQL query
        '====================
        Dim idd = New SqlParameter("@id", "%" & id & "%")
        Dim query As String = "select p.id id, pv.pvid pvid
                                    from patient p 
                                    join patient_visit pv on p.id = pv.id
                                    where p.paid like @id"
        Dim Results = db.Database.SqlQuery(Of LookupVM)(query, idd).ToList()

        For Each item In Results
            Dim pvid = New SqlParameter("@pvid", "%" & item.pvid & "%")
            Dim query2 As String = "select po.remarks remarks, po.entereddt entereddt, po.Consultant Consultant
                                    from procedure_order po 
                                    join procedures p on po.pdid = p.pdid
                                    where po.pvid like @pvid
                                    order by po.entereddt desc"
                Dim Results2 = db.Database.SqlQuery(Of LookupVM)(query2, pvid).ToList()

                For Each item2 In Results2
                    Dim ProcedureList2 As New LookupVM()
                    ProcedureList2.remarks = item2.remarks
                    ProcedureList2.entereddt = item2.entereddt
                    ProcedureList2.ForConsultant = item2.ForConsultant
                    listProcedure.Add(ProcedureList2)
                Next

        Next

        Return listProcedure
    End Using

End Function

我想知道我是否能够通过除列表之外的其他内容将这些值传递给控制器​​。如果可能的话,它会是什么?因为如果它是一个列表,我不能在不使用foreach循环的情况下在页面上显示它们。

另一个问题是,我的代码在概念上是正确还是错误?因为当我运行时,我花了5分钟来显示包含上述代码的72个值的列表。我认为这花了太长时间。有没有办法让它加载更快?

1 个答案:

答案 0 :(得分:0)

关于列表,在视图中执行For Each没有任何问题。如果需要,则需要它,没有理由避免它。

一些查询提示(由于缺乏细节,很难做得更好):

  • 如果您的paidpvid列为INT,则不要使用LIKE @id查询,而是使用= @id(不% }} 在里面)。即使它们是(N)VARCHAR,那么使用LIKE也需要合理和明确。如果意外完成,则输出通常是错误的。

  • LIKE '%value%'会导致索引被忽略,可能会导致性能下降。

  • 确保您在用于加入的列上有索引。

  • 尝试将两个查询合并为一个,以限制.NET / DB往返次数。

相关问题