/// <summary>
        /// get the dataset with the filter from the grid
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="jqGridViewModel"></param>
        /// <param name="source"></param>
        /// <returns></returns>
        public IQueryable <T> GetFilteredDataSet <T>(JQGridViewModel jqGridViewModel, IQueryable <T> source)
        {
            if (string.IsNullOrEmpty(jqGridViewModel.sord))
            {
                jqGridViewModel.sord = "desc";
            }

            //direction of sort
            bool dir = jqGridViewModel.sord.ToLower().Equals("desc", StringComparison.CurrentCultureIgnoreCase) ? true : false;

            if (jqGridViewModel._search)
            {
                //get the filter
                string filterCriteria = JQGridFilterHelper.FilterQuery <T>(jqGridViewModel);

                return(source.Where(filterCriteria).OrderBy(jqGridViewModel.sidx, dir));
            }
            else
            {
                //get the paged result without filter
                return(source.OrderBy(jqGridViewModel.sidx, dir));
            }
        }
        public JsonResult GetResult <T>(JQGridViewModel jqGridViewModel, IQueryable <T> source)
        {
            //get the default page size from web.config
            int pageSize = 0;

            if (jqGridViewModel.rows == 0)
            {
                int.TryParse(ApplicationSetting.JqGridDefaultPageSize, out pageSize);
            }
            else
            {
                pageSize = jqGridViewModel.rows;
            }

            if (string.IsNullOrEmpty(jqGridViewModel.sord))
            {
                jqGridViewModel.sord = "desc";
            }

            //direction of sort
            bool dir       = jqGridViewModel.sord.ToLower().Equals("desc", StringComparison.CurrentCultureIgnoreCase) ? true : false;
            var  totalRows = 0;

            var result = new List <T>();

            if (jqGridViewModel._search)
            {
                //get the filter
                string filterCriteria = JQGridFilterHelper.FilterQuery <T>(jqGridViewModel);

                // result = source.Where(filterCriteria).OrderBy(jqGridViewModel.sidx, dir).ToList();

                //total rows in table
                totalRows = source.Where(filterCriteria).OrderBy(jqGridViewModel.sidx, dir).Count();

                result = source.Where(filterCriteria).OrderBy(jqGridViewModel.sidx, dir)
                         .Skip((jqGridViewModel.page - 1) * pageSize)
                         .Take(pageSize)
                         .ToList();
            }
            else
            {
                //result = source.OrderBy(jqGridViewModel.sidx, dir).ToList();
                //total rows in table
                totalRows = source.OrderBy(jqGridViewModel.sidx, dir).Count();

                //get the paged result without filter
                result = source.OrderBy(jqGridViewModel.sidx, dir)
                         .Skip((jqGridViewModel.page - 1) * pageSize)
                         .Take(pageSize)
                         .ToList();
            }

            var jsonResult = Json(new
            {
                // colName = result[0].GetType().GetProperties().Select(s => s.Name).ToArray(),
                page    = jqGridViewModel.page,
                rows    = result.ToArray(),
                records = totalRows,
                total   = Convert.ToInt32(Math.Ceiling(Convert.ToSingle(totalRows) / Convert.ToSingle(pageSize)))
            }, JsonRequestBehavior.AllowGet);

            return(jsonResult);
        }