コード例 #1
0
        public async Task <JsonResult> GetUsers(FGridModel dtModel)
        {
            var users  = _dbContext.Users.AsQueryable();
            var result = await users.ApplyFGridFilters(dtModel);

            return(Json(result));
        }
コード例 #2
0
ファイル: LinqExtensions.cs プロジェクト: GarunAxper/FGrid
        public static async Task <FGridResult <T> > ApplyFGridFilters <T>(this IQueryable <T> sourceList,
                                                                          FGridModel dtModel)
        {
            // now just get the count of items (without the skip and take) - eg how many could be returned with filtering
            var totalResultsCount = await sourceList.CountAsync();

            var searchBy = dtModel.Search?.Value;

            // if we have an empty search then just order the results by Id ascending
            var orderCriteria           = "Id";
            var orderAscendingDirection = true;

            if (dtModel.Order != null)
            {
                // in this example we just default sort on the 1st column
                orderCriteria           = dtModel.Columns[dtModel.Order[0].Column].Data;
                orderAscendingDirection = dtModel.Order[0].Dir.ToString().ToLower() == "asc";
            }

            // if (!string.IsNullOrEmpty(searchBy))
            // {
            //     sourceList = sourceList.Where(r => r.Name != null && r.Name.ToUpper().Contains(searchBy.ToUpper()) ||
            //                                        r.Lastname != null &&
            //                                        r.Lastname.ToUpper().Contains(searchBy.ToUpper()) ||
            //                                        r.Notes != null &&
            //                                        r.Notes.ToUpper().Contains(searchBy.ToUpper()));
            // }

            foreach (var column in dtModel.Columns)
            {
                if (column.Searchable && !string.IsNullOrEmpty(column.Search.Value))
                {
                    sourceList = sourceList.Filter(column.Data, column.Search.Value);
                }
            }

            sourceList = orderAscendingDirection
                ? sourceList.OrderByDynamic(orderCriteria, FGridOrderDir.Asc)
                : sourceList.OrderByDynamic(orderCriteria, FGridOrderDir.Desc);

            var filteredResultsCount = await sourceList.CountAsync();

            return(new FGridResult <T>
            {
                Draw = dtModel.Draw,
                RecordsTotal = totalResultsCount,
                RecordsFiltered = filteredResultsCount,
                Data = await sourceList
                       .Skip(dtModel.Start)
                       .Take(dtModel.Length)
                       .ToListAsync()
            });
        }
コード例 #3
0
ファイル: Index.cshtml.cs プロジェクト: GarunAxper/FGrid
        public async Task <JsonResult> OnPostGetUsers([FromBody] FGridModel dtModel)
        {
            var searchBy = dtModel.Search?.Value;

            // if we have an empty search then just order the results by Id ascending
            var orderCriteria           = "Id";
            var orderAscendingDirection = true;

            if (dtModel.Order != null)
            {
                // in this example we just default sort on the 1st column
                orderCriteria           = dtModel.Columns[dtModel.Order[0].Column].Data;
                orderAscendingDirection = dtModel.Order[0].Dir.ToString().ToLower() == "asc";
            }

            var result = _dbContext.Users.AsQueryable();

            if (!string.IsNullOrEmpty(searchBy))
            {
                result = result.Where(r => r.Name != null && r.Name.ToUpper().Contains(searchBy.ToUpper()) ||
                                      r.Lastname != null &&
                                      r.Lastname.ToUpper().Contains(searchBy.ToUpper()) ||
                                      r.Notes != null &&
                                      r.Notes.ToUpper().Contains(searchBy.ToUpper()));
            }

            // var parameter = Expression.Parameter(typeof(TestRegister), "x");
            // var filterValue = Expression.Property(parameter, "FirstSurname");
            //
            // var someValue = Expression.Constant("Li", typeof(string));
            // var containsMethodExp = Expression.Call(filterValue,
            //     typeof(string).GetMethods()
            //     .First(m => m.Name == "Contains" && m.GetParameters().Length == 1),
            //     someValue);
            //
            // var predicate = Expression.Lambda<Func<TestRegister, bool>>(containsMethodExp, parameter);
            //
            // result = result.Where(predicate);

            foreach (var column in dtModel.Columns)
            {
                if (column.Searchable && !string.IsNullOrEmpty(column.Search.Value))
                {
                    result = result.Filter(column.Data, column.Search.Value);
                }
            }

            result = orderAscendingDirection
                ? result.OrderByDynamic(orderCriteria, FGridOrderDir.Asc)
                : result.OrderByDynamic(orderCriteria, FGridOrderDir.Desc);

            // now just get the count of items (without the skip and take) - eg how many could be returned with filtering
            var filteredResultsCount = await result.CountAsync();

            var totalResultsCount = await _dbContext.Users.CountAsync();

            return(new JsonResult(new FGridResult <TestUser>
            {
                Draw = dtModel.Draw,
                RecordsTotal = totalResultsCount,
                RecordsFiltered = filteredResultsCount,
                Data = await result
                       .Skip(dtModel.Start)
                       .Take(dtModel.Length)
                       .ToListAsync()
            }));
        }