예제 #1
0
 public static IQueryable <T> Take <T>(this IQueryable <T> self, DtParams dtParams)
 {
     if (dtParams.length < 0)
     {
         return(self);
     }
     return(self.Take(dtParams.length));
 }
예제 #2
0
        private static Expression <Func <T, object> > GenOrderLambda <T>(DtParams dtParams, string entityLetter)
        {
            var param = Expression.Parameter(typeof(T), entityLetter);
            var expr  =
                Expression.Lambda <Func <T, object> >(
                    Expression.Convert(
                        Expression.Property(
                            param,
                            dtParams.columns[int.Parse(dtParams.order[0]["column"])]["data"]
                            ),
                        typeof(object)
                        ),
                    param
                    );

            return(expr);
        }
예제 #3
0
        public static IEnumerable <T> Order <T>(this IEnumerable <T> self, DtParams dtParams, string entityLetter = "e")
        {
            Func <Func <T, object>, IOrderedEnumerable <T> > order;

            if (dtParams.order[0]["dir"] == "asc")
            {
                order = new Func <Func <T, object>, IOrderedEnumerable <T> >(self.OrderBy);
            }
            else
            {
                order = new Func <Func <T, object>, IOrderedEnumerable <T> >(self.OrderByDescending);
            }
            var expr = GenOrderLambda <T>(dtParams, entityLetter);
            var func = expr.Compile();

            return(order(func));
        }
예제 #4
0
        public static IQueryable <T> Order <T>(this IQueryable <T> self, DtParams dtParams, string entityLetter = "e")
        {
            Func <Expression <Func <T, object> >, IOrderedQueryable <T> > order;

            if (dtParams.order == null)
            {
                return(self);
            }
            if (dtParams.order[0]["dir"] == "asc")
            {
                order = new Func <Expression <Func <T, object> >, IOrderedQueryable <T> >(self.OrderBy);
            }
            else
            {
                order = new Func <Expression <Func <T, object> >, IOrderedQueryable <T> >(self.OrderByDescending);
            }
            return(order(GenOrderLambda <T>(dtParams, entityLetter)));
        }
예제 #5
0
        private static Expression <Func <T, bool> > GenFilterLambda <T>(DtParams dtParams, string entityLetter)
        {
            var param = Expression.Parameter(typeof(T), entityLetter);
            Expression <Func <T, bool> > search;

            if (dtParams.search.ContainsKey("value") && !String.IsNullOrWhiteSpace(dtParams.search["value"]))
            {
                Expression expr = Expression.Constant(false);

                foreach (var col in dtParams.columns.Where(c => c.ContainsKey("data") && c.ContainsKey("searchable") && c["searchable"] == "true"))
                {
                    expr = Expression.OrElse(
                        expr,
                        Expression.Call(
                            Expression.Call(
                                Expression.Call(
                                    Expression.Property(
                                        param,
                                        col["data"]
                                        ),
                                    "ToString",
                                    null
                                    ),
                                "ToLowerInvariant",
                                null
                                ),
                            "Contains",
                            null,
                            Expression.Constant(dtParams.search["value"].ToLowerInvariant())
                            )
                        );
                }
                search = Expression.Lambda <Func <T, bool> >(expr, param);
            }
            else
            {
                search = Expression.Lambda <Func <T, bool> >(Expression.Constant(true), param);
            }
            return(search);
        }
예제 #6
0
        //public static JsonResult DataTable<T>(this Controller self, IQueryable<T> result, DtParams filter)
        //{
        //  return new JsonResult()
        //  {
        //    Data = new
        //    {
        //      data = result,
        //      recordsTotal = overall,
        //      recordsFiltered = result.Count()
        //    }
        //  };
        //}

        //public static JsonResult DataTable<S, D>(this Controller self, IEnumerable<S> result, DtParams filter, Func<S, D> map)
        //{
        //  return new JsonResult()
        //  {
        //    Data = new
        //    {
        //      data = result.Full(filter).Select(map),
        //      recordsTotal = result.Count(),
        //      recordsFiltered = result.Filter(filter).Count()
        //    }
        //  };
        //}
        public static JsonResult DataTable <S, D>(this Controller self, IQueryable <S> result, DtParams filter, Func <S, D> map)
        {
            return(new JsonResult()
            {
                Data = new
                {
                    data = result.Full(filter).Select(map),
                    recordsTotal = result.Count(),
                    recordsFiltered = result.Filter(filter).Count()
                }
            });
        }
예제 #7
0
 public static IQueryable <T> Skip <T>(this IQueryable <T> self, DtParams dtParams)
 {
     return(self.Skip(dtParams.start));
 }
예제 #8
0
 public static IQueryable <T> Filter <T>(this IQueryable <T> self, DtParams dtParams, string entityLetter = "e")
 {
     return(self.Where(GenFilterLambda <T>(dtParams, entityLetter)));
 }
예제 #9
0
 public static IEnumerable <T> Full <T>(this IEnumerable <T> self, DtParams dtParams)
 {
     return(self.Filter(dtParams).Order(dtParams).Skip(dtParams).Take(dtParams));
 }
예제 #10
0
 public static IEnumerable <T> Filter <T>(this IEnumerable <T> self, DtParams dtParams, string entityLetter = "e")
 {
     return(self.Where(GenFilterLambda <T>(dtParams, entityLetter).Compile()));
 }