/// <summary> /// Converts a DatatableReply into a datatable accepted format (it's mostly renaming the variables) /// </summary> /// <param name="reply"> /// This datatable reply /// </param> /// <returns> /// This datatable reply as a valid Json object /// </returns> public static JsonResult ToJson(this DatatableReply reply) { return(new JsonResult { Data = new { iTotalRecords = reply.TotalRecords, iTotalDisplayRecords = reply.TotalDisplayRecords, sEcho = reply.Echo, sColumns = reply.Columns, aaData = reply.Data }, JsonRequestBehavior = JsonRequestBehavior.AllowGet, }); }
/// <summary> /// Applies the desired sorting, filtering and pagination logic to the /// data source entities according to the param object and returns a reply /// </summary> /// <param name="param"> /// The parameter containing the sorting, filtering and pagination logic /// </param> /// <returns> /// A parsed collection of entities wrapped in a reply object /// </returns> public DatatableReply Parse(DatatableParam param) { int totalRecords = _entities.Count(); _entities = Sort(param); _entities = FilterGlobal(param); _entities = FilterSpecific(param); int displayRecords = _entities.Count(); _entities = _entities.Skip(param.DisplayStart); _entities = _entities.Take(param.DisplayLength); var projector = new DatatableEntityProjector <TEntity>(_entities); var reply = new DatatableReply { Echo = Convert.ToInt32(param.Echo), Columns = string.Join(",", _properties.Select(p => p.ColumnHeader)), TotalRecords = totalRecords, TotalDisplayRecords = displayRecords, Data = projector.Project(_sessionObject).ToArray() }; return(reply); }