private object ExecuteQuery(UsersQueryInput usersQueryInput, IEnumerable<string> groupIds) { RavenQueryStatistics stats; User authenticatedUser = null; if (_userContext.IsUserAuthenticated()) { authenticatedUser = _documentSession.Load<User>(_userContext.GetAuthenticatedUserId()); } var query = _documentSession .Advanced .LuceneQuery<All_Users.Result, All_Users>() .Statistics(out stats) .SelectFields<All_Users.Result>("UserId", "GroupIds", "ConnectionIds", "SightingCount", "LatestHeartbeat", "LatestActivity", "User", "LatestObservationIds", "LatestObservations"); bool criteriaAdded = false; if (groupIds.Any()) { query = query .WhereIn("GroupIds", groupIds); criteriaAdded = true; } if (!string.IsNullOrWhiteSpace(usersQueryInput.Query)) { var field = "AllFields"; if (usersQueryInput.Field.ToLower() == "name") { field = "Name"; } if (usersQueryInput.Field.ToLower() == "description") { field = "Description"; } if (criteriaAdded) { query = query.AndAlso(); } query = query .Search(field, usersQueryInput.Query); } switch (usersQueryInput.Sort.ToLower()) { case "z-a": query = query.AddOrder(x => x.SortName, true); break; default: case "a-z": query = query.AddOrder(x => x.SortName, false); break; } return query .Skip(usersQueryInput.GetSkipIndex()) .Take(usersQueryInput.GetPageSize()) .ToList() .Select(x => _userViewFactory.Make(x.User, authenticatedUser, true, x.SightingCount, x.LatestObservations != null ? x.LatestObservations.Take(4) : null)) .ToPagedList( usersQueryInput.GetPage(), usersQueryInput.GetPageSize(), stats.TotalResults ); }
private object ExecuteQuery(UsersQueryInput usersQueryInput, IEnumerable <string> groupIds) { RavenQueryStatistics stats; User authenticatedUser = null; if (_userContext.IsUserAuthenticated()) { authenticatedUser = _documentSession.Load <User>(_userContext.GetAuthenticatedUserId()); } var query = _documentSession .Advanced .LuceneQuery <All_Users.Result, All_Users>() .Statistics(out stats) .SelectFields <All_Users.Result>("UserId", "GroupIds", "ConnectionIds", "SightingCount", "LatestHeartbeat", "LatestActivity", "User", "LatestObservationIds", "LatestObservations"); bool criteriaAdded = false; if (groupIds.Any()) { query = query .WhereIn("GroupIds", groupIds); criteriaAdded = true; } if (!string.IsNullOrWhiteSpace(usersQueryInput.Query)) { var field = "AllFields"; if (usersQueryInput.Field.ToLower() == "name") { field = "Name"; } if (usersQueryInput.Field.ToLower() == "description") { field = "Description"; } if (criteriaAdded) { query = query.AndAlso(); } query = query .Search(field, usersQueryInput.Query); } switch (usersQueryInput.Sort.ToLower()) { case "z-a": query = query.AddOrder(x => x.SortName, true); break; default: case "a-z": query = query.AddOrder(x => x.SortName, false); break; } return(query .Skip(usersQueryInput.GetSkipIndex()) .Take(usersQueryInput.GetPageSize()) .ToList() .Select(x => _userViewFactory.Make(x.User, authenticatedUser, true, x.SightingCount, x.LatestObservations != null ? x.LatestObservations.Take(4) : null)) .ToPagedList( usersQueryInput.GetPage(), usersQueryInput.GetPageSize(), stats.TotalResults )); }