private DataTablesPropertyInfo FindColumn(DataTablesParam dtParameters, DataTablesPropertyInfo[] columns, int i) { if (dtParameters.sColumnNames.Any()) { return(columns.First(x => x.PropertyInfo.Name == dtParameters.sColumnNames[i])); } else { return(columns[i]); } }
public static async Task <DataTablesResponseData> GetDataTableResponseAsync <TSource>(this IQueryable <TSource> data, DataTablesParam param, Action <TSource> postQueryTransform, bool disablePaging = false) { var filters = new DataTablesFiltering(); var outputProperties = DataTablesTypeInfo <TSource> .Properties; List <TSource> queryResult; var totalDisplayRecords = 0; var filteredData = filters.ApplyFiltersAndSort(param, data, outputProperties); if (!disablePaging) { totalDisplayRecords = await filteredData.CountAsync(); var skipped = filteredData.Skip(param.iDisplayStart); queryResult = await(param.iDisplayLength <= 0 ? skipped : skipped.Take(param.iDisplayLength)).ToListAsync(); } else { queryResult = await filteredData.ToListAsync(); totalDisplayRecords = queryResult.Count(); } queryResult.ForEach(postQueryTransform); var result = new DataTablesResponseData() { iTotalRecords = totalDisplayRecords, iTotalDisplayRecords = totalDisplayRecords, sEcho = param.sEcho, aaData = queryResult.Cast <object>().ToArray(), }; var responseOptions = new ResponseOptions <TSource> { ArrayOutputType = null }; var dictionaryTransform = DataTablesTypeInfo <TSource> .ToDictionary(responseOptions); result = result.Transform(dictionaryTransform).Transform <Dictionary <string, object>, Dictionary <string, object> >(StringTransformers.StringifyValues); result = ApplyOutputRules(result, responseOptions); return(result); }
public IQueryable <T> ApplyFiltersAndSort <T>(DataTablesParam dtParameters, IQueryable <T> data, DataTablesPropertyInfo[] columns) { if (!String.IsNullOrEmpty(dtParameters.sSearch)) { var parts = new List <string>(); var parameters = new List <object>(); for (var i = 0; i < dtParameters.iColumns; i++) { if (dtParameters.bSearchable[i]) { try { parts.Add(GetFilterClause(dtParameters.sSearch, columns[i], parameters)); } catch (Exception) { //if the clause doesn't work, skip it! } } } var values = parts.Where(p => p != null); data = data.Where(string.Join(" or ", values), parameters.ToArray()); } for (int i = 0; i < dtParameters.sSearchValues.Count; i++) { if (dtParameters.bSearchable[i]) { var searchColumn = dtParameters.sSearchValues[i]; if (!string.IsNullOrWhiteSpace(searchColumn)) { DataTablesPropertyInfo column = FindColumn(dtParameters, columns, i); var parameters = new List <object>(); var filterClause = GetFilterClause(searchColumn, column, parameters); if (string.IsNullOrWhiteSpace(filterClause) == false) { data = data.Where(filterClause, parameters.ToArray()); } } } } string sortString = ""; for (int i = 0; i < dtParameters.iSortingCols; i++) { int columnNumber = dtParameters.iSortCol[i]; DataTablesPropertyInfo column = FindColumn(dtParameters, columns, columnNumber); string columnName = column.PropertyInfo.Name; string sortDir = dtParameters.sSortDir[i]; if (i != 0) { sortString += ", "; } sortString += columnName + " " + sortDir; } if (!string.IsNullOrWhiteSpace(sortString)) { data = data.OrderBy(sortString); } return(data); }
public static async Task <IEnumerable <TSource> > GetObjectResponseAsync <TSource>(this IQueryable <TSource> data, DataTablesParam param) { var filters = new DataTablesFiltering(); var outputProperties = DataTablesTypeInfo <TSource> .Properties; var filteredData = filters.ApplyFiltersAndSort(param, data, outputProperties); var queryResult = await filteredData.ToListAsync(); return(queryResult); }