コード例 #1
0
        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
                );
        }
コード例 #2
0
        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
                       ));
        }