private static IQueryable <T> OrderDataTable <T>(IQueryable <T> query, DataTableServerSideRequest request) { if (request.Order.Any()) { string ordering = string.Empty; string aux = string.Empty; foreach (var order in request.Order) { var column = request.Columns[order.Column]; if (string.IsNullOrWhiteSpace(column.Name)) { continue; } if (order.Dir == "desc") { ordering += $"{column.Name} DESC{aux}"; } else { ordering += $"{column.Name} ASC{aux}"; } aux = ","; } if (!string.IsNullOrEmpty(ordering)) { return(query.OrderBy(ordering)); } } return(query); }
private static IQueryable <T> FilterQueryDataTable <T>(IQueryable <T> query, DataTableServerSideRequest request) { if (request.Search.Regex || string.IsNullOrWhiteSpace(request.Search.Value)) { return(query); } var columnsSearchable = request.Columns.Where(c => c.Searchable && !string.IsNullOrEmpty(c.Name)).ToList(); string search = string.Empty; string aux = string.Empty; foreach (var column in columnsSearchable) { query = query.Where(ExpressionUtils.BuildPredicate <T>(column.Name, "Contains", request.Search.Value)); } return(query); }
public static DataTableServerSideResult <T> GetDatatableResult <T>(this IQueryable <T> query, DataTableServerSideRequest request) where T : class { var recordsTotal = query.Count(); query = FilterQueryDataTable(query, request); var recordsFiltered = query.Count(); query = OrderDataTable(query, request); var dataTableServerSideResult = new DataTableServerSideResult <T> { Draw = request.Draw, RecordsFiltered = recordsFiltered, RecordsTotal = recordsTotal, Data = query.Skip(request.Start).Take(request.Length).ToList() }; return(dataTableServerSideResult); }