public async Task <GetListResponseModel <TModel> > GetListAppUsersAsync <TModel>( GetListAppUsersRequestModel requestModel, ParsingConfig parsingConfig = null) { #region Validation var userInfo = BusinessContext.Current?.PrincipalInfo; var validationData = new ValidationData(); // validation logic here if (!validationData.IsValid) { throw validationData.BuildException(); } #endregion var queryModel = requestModel.MapTo <DynamicQueryAppUserModel>(); IQueryable <AppUser> query = dbContext.Users.AsNoTracking(); #region Filter if (queryModel.Id != null) { query = query.ById(queryModel.Id); } if (queryModel.UserName != null) { query = query.ByUsername(queryModel.UserName); } if (queryModel.SearchTerm != null) { query = query.BySearchTerm(queryModel.SearchTerm); } #endregion var orgQuery = query; #region Sorting if (!queryModel.SortBy.IsNullOrEmpty()) { foreach (var field in queryModel.SortBy) { var asc = field[0] == QueryConsts.SortAscPrefix; var fieldName = field.Remove(0, 1); switch (fieldName) { case DynamicQueryAppUserModel.SortByUsername: { if (asc) { query = query.SequentialOrderBy(o => o.UserName); } else { query = query.SequentialOrderByDesc(o => o.UserName); } } break; default: throw AppValidationException.From(ResultCode.InvalidPagingRequest); } } } #endregion if (queryModel.Page > 0) { query = query.Limit(queryModel.Page, queryModel.PageLimit); } #region Projection var projectionArr = queryModel.Fields.Select(o => DynamicQueryAppUserModel.Projections[o]).ToArray(); var projectionStr = string.Join(',', projectionArr); var projectedQuery = query.Select <TModel>( parsingConfig ?? DynamicLinqEntityTypeProvider.DefaultParsingConfig, $"new {typeof(TModel).FullName}({projectionStr})"); #endregion var responseModels = await projectedQuery.ToArrayAsync(); var response = new GetListResponseModel <TModel> { List = responseModels, }; if (queryModel.CountTotal) { response.TotalCount = await orgQuery.CountAsync(); } return(response); }
public static GetListResponseModel GetItemsForList(GetListRequestModel requestModel) { var distanceFrom = 0; var distanceTo = 1000000; float rating = 0; if (!string.IsNullOrEmpty(requestModel.DistanceFrom)) { distanceFrom = Convert.ToInt16(requestModel.DistanceFrom); } if (!string.IsNullOrEmpty(requestModel.DistanceTo)) { distanceTo = Convert.ToInt16(requestModel.DistanceTo); } if (!string.IsNullOrEmpty(requestModel.Rating)) { rating = (float)Convert.ToDouble(requestModel.Rating); } DbGeography userLoc = null; List <string> latlng = new List <string>(); if (!string.IsNullOrEmpty(requestModel.Cords) && requestModel.Cords != "") { latlng = requestModel.Cords.Split('_').ToList(); if (latlng.Count == 2) { userLoc = CommonService.ConvertLatLonToDbGeography(latlng[1], latlng[0]); // lat _ lng } } using (var dbContext = new DeliversEntities()) { var allCats = GetCategories(true); if ((requestModel.IsWeb && (requestModel.TypeList == null || requestModel.TypeList.Count() == 0)) || (!requestModel.IsWeb && (requestModel.Type == -1))) { requestModel.TypeList = new List <int>(); requestModel.TypeList = allCats.Select(c => (int)c.CatId).ToList(); } requestModel.CurrentPage--; var response = new GetListResponseModel(); var newList = new List <ListItemLocal>(); string searchText = null; if (!string.IsNullOrEmpty(requestModel.SearchTerm)) { searchText = requestModel.SearchTerm.ToLower(); } var list = dbContext.ListItems.Where(item => item.Status && ((requestModel.IsWeb && requestModel.TypeList.Any(o => o == item.Type)) || (!requestModel.IsWeb && requestModel.Type == -1 && requestModel.TypeList.Any(o => o == item.Type)) || (item.Type == requestModel.Type && !requestModel.IsWeb)) && (string.IsNullOrEmpty(searchText) || item.Name.ToLower().Contains(searchText) || item.Address.ToLower().Contains(searchText) || item.Description.ToLower().Contains(searchText) || (item.ItemDetails.Any(det => det.Name.ToLower().Contains(searchText))) )).ToList(); if (list.Any()) { var finals = list.Select(obj => obj.MapListItem()).ToList(); foreach (var rest in finals) { var restRate = (float)Convert.ToDouble(rest.Rating); var dist = CommonService.GetDistance((double)userLoc.Latitude, (double)userLoc.Longitude, Convert.ToDouble(rest.LocationObj.Latitude), Convert.ToDouble(rest.LocationObj.Longitude)); if ((int)dist >= distanceFrom && (int)dist <= distanceTo && restRate >= rating) { var disst = Math.Round((double)dist, 2); rest.LocationObj = null; rest.Distance = disst; rest.Name = rest.Name; rest.TypeName = allCats.FirstOrDefault(c => c.CatId == rest.Type).Name; newList.Add(rest); } } newList = newList.OrderBy(obj => obj.Distance).ToList(); var take = newList.Skip(requestModel.CurrentPage * requestModel.ItemsPerPage). Take(requestModel.ItemsPerPage).ToList(); response.Items = take; } requestModel.CurrentPage++; response.ItemsPerPage = requestModel.ItemsPerPage; response.CurrentPage = requestModel.CurrentPage; response.TotalItems = newList.Count; return(response); } }