public static ItemOperations.Result DeleteItem(UserContext userContext, StoreObjectId itemId, StoreObjectId folderId)
        {
            ItemOperations.Result result            = null;
            ListViewViewState     listViewViewState = userContext.LastClientViewState as ListViewViewState;

            if (listViewViewState != null && folderId.Equals(listViewViewState.FolderId))
            {
                result = ItemOperations.GetNextViewItem(userContext, ItemOperations.Action.Delete, itemId, folderId);
            }
            if (Utilities.IsDefaultFolderId(userContext.MailboxSession, folderId, DefaultFolderType.DeletedItems))
            {
                Utilities.DeleteItems(userContext, DeleteItemFlags.SoftDelete, new StoreId[]
                {
                    itemId
                });
            }
            else
            {
                Utilities.DeleteItems(userContext, DeleteItemFlags.MoveToDeletedItems, new StoreId[]
                {
                    itemId
                });
            }
            return(result);
        }
        public static ItemOperations.Result GetNextViewItem(UserContext userContext, ItemOperations.Action action, StoreObjectId itemId, StoreObjectId folderId)
        {
            Folder folder = null;

            ItemOperations.Result result;
            try
            {
                MessageModuleSearchViewState messageModuleSearchViewState = userContext.LastClientViewState as MessageModuleSearchViewState;
                SortBy[] sortOrder;
                if (messageModuleSearchViewState != null)
                {
                    using (Folder folder2 = Folder.Bind(userContext.MailboxSession, messageModuleSearchViewState.FolderId))
                    {
                        sortOrder = ItemOperations.GetSortOrder(userContext, folder2);
                        FolderSearch folderSearch = new FolderSearch();
                        folder = folderSearch.Execute(userContext, folder2, messageModuleSearchViewState.SearchScope, messageModuleSearchViewState.SearchString, userContext.ForceNewSearch, false);
                        userContext.ForceNewSearch = false;
                        goto IL_77;
                    }
                }
                folder    = Folder.Bind(userContext.MailboxSession, folderId);
                sortOrder = ItemOperations.GetSortOrder(userContext, folder);
IL_77:
                using (QueryResult queryResult = folder.ItemQuery(ItemQueryType.None, null, sortOrder, new PropertyDefinition[]
                {
                    ItemSchema.Id
                }))
                {
                    queryResult.SeekToCondition(SeekReference.OriginBeginning, new ComparisonFilter(ComparisonOperator.Equal, ItemSchema.Id, itemId));
                    int num  = queryResult.CurrentRow;
                    int num2 = queryResult.EstimatedRowCount;
                    int num3 = 0;
                    if (num == num2 || num2 == 1)
                    {
                        result = null;
                    }
                    else
                    {
                        switch (action)
                        {
                        case ItemOperations.Action.Next:
                            if (num + 1 == num2)
                            {
                                return(null);
                            }
                            num3 = queryResult.SeekToOffset(SeekReference.OriginCurrent, 1);
                            break;

                        case ItemOperations.Action.Prev:
                            if (num == 0)
                            {
                                return(null);
                            }
                            num3 = queryResult.SeekToOffset(SeekReference.OriginCurrent, -1);
                            break;

                        case ItemOperations.Action.Delete:
                            if (userContext.UserOptions.NextSelection == NextSelectionDirection.Previous)
                            {
                                if (num == 0)
                                {
                                    num3 = queryResult.SeekToOffset(SeekReference.OriginCurrent, 1);
                                    num3 = 0;
                                }
                                else
                                {
                                    num3 = queryResult.SeekToOffset(SeekReference.OriginCurrent, -1);
                                }
                            }
                            else if (userContext.UserOptions.NextSelection == NextSelectionDirection.Next)
                            {
                                if (num2 - (num + 1) == 0)
                                {
                                    num3 = queryResult.SeekToOffset(SeekReference.OriginCurrent, -1);
                                }
                                else
                                {
                                    num3 = queryResult.SeekToOffset(SeekReference.OriginCurrent, 1);
                                    num3 = 0;
                                }
                            }
                            else if (userContext.UserOptions.NextSelection == NextSelectionDirection.ReturnToView)
                            {
                                return(null);
                            }
                            num2--;
                            break;
                        }
                        num += num3;
                        if (messageModuleSearchViewState != null)
                        {
                            messageModuleSearchViewState.PageNumber = num / userContext.UserOptions.BasicViewRowCount + 1;
                        }
                        else
                        {
                            ListViewViewState listViewViewState = userContext.LastClientViewState as ListViewViewState;
                            if (listViewViewState != null && folderId.Equals(listViewViewState.FolderId))
                            {
                                listViewViewState.PageNumber = num / userContext.UserOptions.BasicViewRowCount + 1;
                            }
                        }
                        object[][] rows = queryResult.GetRows(1);
                        result = new ItemOperations.Result(((VersionedId)rows[0][0]).ObjectId, folderId);
                    }
                }
            }
            catch (ObjectNotFoundException)
            {
                result = null;
            }
            finally
            {
                if (folder != null)
                {
                    folder.Dispose();
                }
            }
            return(result);
        }