Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }