public async Task <SearchResult <ContractKind> > Search(ContractKindSearchPattern searchPattern) { IQueryable <ContractKind> query = _ctx.ContractKinds.AsQueryable(); int totalCount = query.Count(); // filters if (!String.IsNullOrWhiteSpace(searchPattern.SearchString)) { string searchString = searchPattern.SearchString.Trim(); query = query.Where(x => x.Name.Contains(searchString)); } // sorting query = query.OrderByDescending(x => x.Id); int filteredCount = query.Count(); // taking query = query.Skip(searchPattern.Skip()).Take(searchPattern.Take()); return(new SearchResult <ContractKind> { Items = await query.ToListAsync(), TotalCount = totalCount, FilteredCount = filteredCount }); }