private static DataTableResponseDataModel <T> ApplyOutputRules <T>(DataTableResponseDataModel <T> responseData, ResponseOptionModel <T> responseOption) where T : class, new() { responseOption = responseOption ?? new ResponseOptionModel <T> { ArrayOutputType = ArrayOutputType.BiDimensionalArray }; DataTableResponseDataModel <T> outputData = responseData; switch (responseOption.ArrayOutputType) { case ArrayOutputType.ArrayOfObjects: { // Nothing is needed break; } default: outputData = responseData.Transform <Dictionary <string, object>, object[]>(d => d.Values.ToArray()); break; } return(outputData); }
public static DataTableResponseDataModel <T> GetDataTableResponse <T>(this IQueryable <T> data, DataTableParamModel dataTableParamModel) where T : class, new() { var totalRecords = data.Count(); // annoying this, as it causes an extra evaluation.. var filters = new DataTableFiltering(); var outputProperties = DataTableTypeInfo <T> .Properties; var filteredData = filters.ApplyFiltersAndSort(dataTableParamModel, data, outputProperties); var totalDisplayRecords = filteredData.Count(); var skipped = filteredData.Skip(dataTableParamModel.DisplayStart); var page = (dataTableParamModel.DisplayLength <= 0 ? skipped : skipped.Take(dataTableParamModel.DisplayLength)).ToArray(); var result = new DataTableResponseDataModel <T> { TotalRecord = totalRecords, TotalDisplayRecord = totalDisplayRecords, Echo = dataTableParamModel.Echo, Data = page.Cast <object>().ToArray() }; return(result); }
public static DataTableActionResult <T> Create <T>(DataTableResponseDataModel <T> responseData, ResponseOptionModel <T> responseOption = null) where T : class, new() { var result = new DataTableActionResult <T>(responseData); var dictionaryTransform = DataTableTypeInfo <T> .ToDictionary(responseOption); result.Data = result .Data .Transform(dictionaryTransform) .Transform <Dictionary <string, object>, Dictionary <string, object> >(StringTransformers.StringifyValues); result.Data = ApplyOutputRules(result.Data, responseOption); return(result); }
/// <typeparam name="T"></typeparam> /// <param name="responseData"> /// The properties of this can be marked up with [DataTablesAttribute] to control sorting/searchability/visibility /// </param> /// <param name="transform"> /// // a transform for custom column rendering e.g. to do a custom date row => new { /// CreatedDate = row.CreatedDate.ToString("dd MM yy") } /// </param> /// <param name="responseOption"></param> /// <returns></returns> public static DataTableActionResult <T> Create <T>(DataTableResponseDataModel <T> responseData, Func <T, object> transform, ResponseOptionModel <T> responseOption = null) where T : class, new() { transform = transform ?? (s => s); var result = new DataTableActionResult <T>(responseData); result.Data = result .Data .Transform <T, Dictionary <string, object> > ( row => TransformTypeInfoHelper.MergeTransformValuesIntoDictionary(transform, row) ) .Transform <Dictionary <string, object>, Dictionary <string, object> >(StringTransformers.StringifyValues); result.Data = ApplyOutputRules(result.Data, responseOption); return(result); }
public static DataTableActionResult <T> GetDataTableActionResult <T>(this DataTableResponseDataModel <T> responseData, ResponseOptionModel <T> responseOption = null) where T : class, new() { return(DataTableActionResult.Create(responseData, responseOption)); }