Imports DigitalData.Modules.Database Imports DigitalData.Modules.Language Imports DigitalData.Modules.Logging Namespace Methods.GetDatatableFromCache Public Class GetDatatableFromCacheMethod Inherits BaseMethod Private ReadOnly TableStore As DataSet Public Sub New(pLogConfig As LogConfig, pMSSQLServer As MSSQLServer, pTableStore As DataSet) MyBase.New(pLogConfig, pMSSQLServer) TableStore = pTableStore End Sub Public Function Run(pData As GetDatatableFromCacheRequest) As GetDatatableFromCacheResponse Try Logger.Debug($"ReturnDatatableFromCache: Datatable: {pData.DataTable}") Dim oDataTable As DataTable = Nothing Logger.Debug("ReturnDatatableFromCache: DataSet contains [{0}] datatables", TableStore.Tables.Count) If TableStore.Tables.Contains(pData.DataTable) Then oDataTable = TableStore.Tables.Item(pData.DataTable).Copy() ' Apply filter and sorting to data Dim oFilterExpression As String = Utils.NotNull(pData.FilterExpression, String.Empty) Dim oSortByColumn As String = Utils.NotNull(pData.SortByColumn, String.Empty) Dim oFilteredRows = oDataTable.Select(oFilterExpression, oSortByColumn) Dim oFilteredTable As DataTable = Nothing If oFilteredRows.Count > 0 Then oFilteredTable = oFilteredRows.CopyToDataTable() oFilteredTable.TableName = pData.DataTable Else ' Produce empty table oFilteredTable = oDataTable.Clone() oFilteredTable.TableName = pData.DataTable End If Logger.Debug("ReturnDatatableFromCache: Datatable Stats for [{0}]:", pData.DataTable) Logger.Debug("Unfiltered: [{0}] rows", oDataTable.Rows.Count) Logger.Debug("Filtered: [{0}] rows", oFilteredTable.Rows.Count) Return New GetDatatableFromCacheResponse(oFilteredTable) Else Logger.Warn($"ReturnDatatableFromCache: Datatable {pData.DataTable} does not exist") Return New GetDatatableFromCacheResponse(New KeyNotFoundException($"Datatable {pData.DataTable} does not exist")) End If Catch ex As Exception Logger.Error(ex) Return New GetDatatableFromCacheResponse(ex) End Try End Function End Class End Namespace