Пример #1
0
        //public static ActionResult Load<TSource, TResult, TKey>(DbSet<TSource> dbset, Func<TSource, TKey> orderquery, Func<TSource, TResult> selector, JqGridQueryParameters jqgridqueryparameter, bool orderbydescending = true) where TSource : class
        //{
        //    return Load(dbset, orderquery, selector, jqgridqueryparameter.rows, jqgridqueryparameter.page, jqgridqueryparameter._search,ref jqgridqueryparameter.filters);
        //}

        public static ActionResult Load <TSource, TResult, TKey>(DbSet <TSource> dbset, Func <TSource, TKey> orderquery, Func <TSource, TResult> selector, int?rows, int?page, bool _search, ref jqgrid_asp.net_mvc.Filter filters, bool orderbydescending = true) where TSource : class
        {
            IQueryable <TSource> where_predicate = JqGrid.GenerateWherePredicate(dbset, _search, ref filters);

            TSource[] cachecresult = null;

            if (where_predicate != null)
            {
                if (orderbydescending)
                {
                    cachecresult = where_predicate
                                   .OrderByDescending(orderquery)
                                   //.Include("Roles")
                                   .ToArray();
                }
                else
                {
                    cachecresult = where_predicate
                                   .OrderBy(orderquery)
                                   //.Include("Roles")
                                   .ToArray();
                }
            }
            else
            {
                if (orderbydescending)
                {
                    cachecresult = dbset
                                   .OrderByDescending(orderquery)
                                   //.Include("Roles")
                                   .ToArray();
                }
                else
                {
                    cachecresult = dbset
                                   .OrderBy(orderquery)
                                   //.Include("Roles")
                                   .ToArray();
                }
            }

            var result = cachecresult.Select(selector).ToArray();

            var pageSize     = rows ?? 10;
            var pageNum      = page ?? 1;
            var totalRecords = result.Length;
            var totalPages   = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

            var jsonData = new JqGridReadingJsonData <TSource, TResult>()
            {
                total   = totalPages,
                page    = pageNum,
                records = totalRecords,
                rows    = result.Skip((pageNum - 1) * pageSize).Take(pageSize).ToArray()
            };

            //return Json(jsonData, JsonRequestBehavior.AllowGet);
            var returnjson = new JsonResult();

            returnjson.Data = jsonData;
            returnjson.JsonRequestBehavior = JsonRequestBehavior.AllowGet;

            return(returnjson);
        }
Пример #2
0
        private static IQueryable <TSource> GenerateWherePredicate <TSource>(DbSet <TSource> dbset, bool _search, ref jqgrid_asp.net_mvc.Filter filters)
            where TSource : class
        {
            var request = HttpContext.Current.Request;
            IQueryable <TSource> where_predicate = null;

            if (_search)
            {
                if (filters == null)
                {
                    filters = jqgrid_asp.net_mvc.Filter.Create(request["filters"] ?? "");
                }

                if (filters == null)
                {
                    throw new NullReferenceException("flters is null, load mvc parse is error");
                }

                where_predicate = dbset;
                //And
                if (filters.groupOp == "AND")
                {
                    foreach (var rule in filters.rules)
                    {
                        if (rule.op == "true")
                        {
                            where_predicate = where_predicate.Where <TSource>(
                                rule.field, rule.data,
                                WhereOperation.Contains);
                        }
                        else
                        {
                            where_predicate = where_predicate.Where <TSource>(
                                rule.field, rule.data,
                                (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        }
                    }
                }
                else
                {
                    //Or
                    var temp = (new List <TSource>()).AsQueryable();
                    foreach (var rule in filters.rules)
                    {
                        var t = where_predicate.Where <TSource>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));

                        if (rule.op == "true")
                        {
                            t = where_predicate.Where <TSource>(
                                rule.field, rule.data,
                                WhereOperation.Contains);
                        }

                        temp = temp.Concat <TSource>(t);
                    }
                    //remove repeating records
                    where_predicate = temp.Distinct <TSource>();
                }
            }
            else
            {
                where_predicate = null;
            }
            return(where_predicate);
        }