public async Task <JsonResult> GetUsers(FGridModel dtModel) { var users = _dbContext.Users.AsQueryable(); var result = await users.ApplyFGridFilters(dtModel); return(Json(result)); }
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() }); }
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() })); }