public ActionResult GetAll(GridRequestViewModel <TViewModel> requestModel)
        {
            var query = _context.Set <TModel>().AsQueryable();

            AddSpecificQuery(ref query);
            query = query.ProcessDinamicQuery(requestModel);

            var noOfPages  = query.Count() / requestModel.Pagination.Number;
            var result     = query.Skip(requestModel.Pagination.Start).Take(requestModel.Pagination.Number).ToList();
            var models     = result.Select(q => _mapper.Map <TViewModel>(q)).ToList();
            var jsonResult = Json(new { Data = models, NoOfPages = noOfPages }, JsonRequestBehavior.AllowGet);

            jsonResult.MaxJsonLength = int.MaxValue;
            return(jsonResult);
        }
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var gridRequest = new GridRequestViewModel();

            gridRequest.RowStartIndex  = GetValueOrDefault <int>(bindingContext, "iDisplayStart");
            gridRequest.RowCount       = GetValueOrDefault <int>(bindingContext, "iDisplayLength");
            gridRequest.GridCustomData = GetStringOrEmpty(bindingContext, "sEcho");
            gridRequest.Search         = GetStringOrEmpty(bindingContext, "sSearch");
            var columnNames     = GetStringOrEmpty(bindingContext, "sColumns").Split(',');
            var sortColumnIndex = GetValueOrDefault <int>(bindingContext, "iSortCol_0");
            var sortDir         = GetStringOrEmpty(bindingContext, "sSortDir_0").ToLower();

            gridRequest.SortColumnName = sortColumnIndex >= 0 && sortColumnIndex < columnNames.Length ? columnNames[sortColumnIndex] : null;
            gridRequest.SortDirection  = sortDir == "asc" ? SortDirection.Ascending : SortDirection.Descending;

            return(gridRequest);
        }
Ejemplo n.º 3
0
        public virtual async Task <ActionResult> Load(GridRequestViewModel gridRequest)
        {
            //Initial load data
            var filter = Session["FlightSearchFilter"] != null ? (string)Session["FlightSearchFilter"] : string.Empty;
            var count  = 0;

            Filtro filtro = new Filtro {
                Flight = filter
            };

            var flightList = await flightService.GetFlights(filtro.Flight);

            var displayRecords = flightList.Count;
            var totalRecords   = 10;

            //var dateFormat = System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "en" ? "MM/dd/yyyy" : "dd/MM/yyyy";
            //System.Globalization.DateTimeFormatInfo dtfi = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat;
            //dtfi.DateSeparator = "/";

            //Create JSON value for pass the view
            return(Json(new
            {
                iTotalDisplayRecords = displayRecords,
                iTotalRecords = totalRecords,
                sEcho = gridRequest.GridCustomData,
                aaData = flightList.Select(d => new { d.Id, d.Airline,
                                                      d.SourceAirportID,
                                                      d.SourceAirportName,
                                                      d.DestinationAirportID,
                                                      d.DestinationAirportName,
                                                      d.Distance,
                                                      d.FuelNeeded,
                                                      d.Stops,
                                                      d.Active })
            }));
        }
Ejemplo n.º 4
0
        public static IQueryable <T> ProcessDinamicQuery <T, P>(
            this IQueryable <T> source, GridRequestViewModel <P> requestModel, char propertyNavigationSplitter = '_') where P : new()
        {
            var  query    = source;
            bool isSorted = false;

            foreach (var aProperty in requestModel.Search.PredicateObject.GetType().GetProperties())
            {
                if (aProperty.GetValue(requestModel.Search.PredicateObject) == null)
                {
                    continue;
                }
                var param = Expression.Parameter(typeof(T), "p");

                if (typeof(P).GetProperty(aProperty.Name, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance).PropertyType == typeof(string))
                {
                    string[] props = aProperty.Name.Split(propertyNavigationSplitter);
                    if (!PropertyExists <T>(props[0]))
                    {
                        continue;
                    }
                    Type type = typeof(T);
                    ParameterExpression arg  = Expression.Parameter(type, "x");
                    Expression          expr = arg;
                    foreach (string prop in props)
                    {
                        PropertyInfo pi = type.GetProperty(prop);
                        expr = Expression.Property(expr, pi);
                        type = pi.PropertyType;
                    }

                    var attr = (FilterOperatorAttribute[])aProperty.GetCustomAttributes(typeof(FilterOperatorAttribute), false);
                    if (attr.Length > 0)
                    {
                        if (!string.IsNullOrEmpty(attr[0].DbField))
                        {
                            expr = Expression.Property(arg, attr[0].DbField);
                        }
                    }
                    var value = Expression.Constant(aProperty.GetValue(requestModel.Search.PredicateObject));

                    var containsmethod = type.GetMethod("Contains", new[] { typeof(string) });
                    var call           = Expression.Call(expr, containsmethod, value);
                    var lambda         = Expression.Lambda <Func <T, bool> >(call, arg);
                    query = query.Where(lambda);
                }
                else
                {
                    string[] props = aProperty.Name.Split(propertyNavigationSplitter);
                    if (!PropertyExists <T>(props[0]))
                    {
                        continue;
                    }
                    Type type = typeof(T);
                    ParameterExpression arg  = Expression.Parameter(type, "x");
                    Expression          expr = arg;
                    foreach (string prop in props)
                    {
                        PropertyInfo pi = type.GetProperty(prop);
                        expr = Expression.Property(expr, pi);
                        type = pi.PropertyType;
                    }
                    var value = Expression.Constant(aProperty.GetValue(requestModel.Search.PredicateObject));

                    FilterOperatorViewModel _operator = FilterOperatorViewModel.Equals;
                    var attr = (FilterOperatorAttribute[])aProperty.GetCustomAttributes(typeof(FilterOperatorAttribute), false);
                    if (attr.Length > 0)
                    {
                        if (attr[0].Operator != null)
                        {
                            _operator = attr[0].Operator.Value;
                        }
                        if (!string.IsNullOrEmpty(attr[0].DbField))
                        {
                            expr = Expression.Property(arg, attr[0].DbField);
                        }
                    }

                    if (typeof(P).GetProperty(aProperty.Name, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance).PropertyType == typeof(DateTime?))
                    {
                        var dateVal = ((DateTime)aProperty.GetValue(requestModel.Search.PredicateObject)).AddDays(1).AddTicks(-1);
                        if (_operator == FilterOperatorViewModel.GreaterOrEquals)
                        {
                            dateVal = dateVal.AddDays(-1);
                        }
                        value = Expression.Constant(dateVal);
                    }

                    BinaryExpression binaryExpression = Expression.Equal(Expression.Property(arg, aProperty.Name), value);
                    if (_operator == FilterOperatorViewModel.GreaterOrEquals)
                    {
                        binaryExpression = Expression.GreaterThanOrEqual(Expression.Property(arg, aProperty.Name), value);
                    }
                    if (_operator == FilterOperatorViewModel.LessOrEquals)
                    {
                        binaryExpression = Expression.LessThanOrEqual(Expression.Property(arg, aProperty.Name), value);
                    }

                    var exp = Expression.Lambda <Func <T, bool> >(binaryExpression, arg);
                    query = query.Where(exp);
                }
            }

            if (!string.IsNullOrEmpty(requestModel.Sort.Predicate))
            {
                isSorted = true;
                if (requestModel.Sort.Reverse)
                {
                    query = query.OrderByDescending(requestModel.Sort.Predicate);
                }
                else
                {
                    query = query.OrderBy(requestModel.Sort.Predicate);
                }
            }
            if (!isSorted)
            {
                query = query.OrderBy("Id");
            }
            return(query);
        }