private static TargetQueryInfo GetTargetQueryFolderId(WorkItemQuery sourceQuery, QueryReplacementParameters replacementParameters)
        {
            TargetQueryInfo targetQueryFolder = new TargetQueryInfo();

            targetQueryFolder.FolderPath = sourceQuery.path;
            if (!string.IsNullOrEmpty(replacementParameters.PathFind) && !string.IsNullOrEmpty(replacementParameters.PathReplace) &&
                !replacementParameters.PathFind.Equals(replacementParameters.PathReplace, StringComparison.InvariantCultureIgnoreCase))
            {
                var findIndex = targetQueryFolder.FolderPath.IndexOf(replacementParameters.PathFind, StringComparison.InvariantCultureIgnoreCase);
                while (findIndex > -1)
                {
                    targetQueryFolder.FolderPath = targetQueryFolder.FolderPath.Remove(findIndex, replacementParameters.PathFind.Length);
                    targetQueryFolder.FolderPath = targetQueryFolder.FolderPath.Insert(findIndex, replacementParameters.PathReplace);
                    findIndex = targetQueryFolder.FolderPath.IndexOf(replacementParameters.PathFind, findIndex + replacementParameters.PathReplace.Length, StringComparison.InvariantCultureIgnoreCase);
                }
            }
            targetQueryFolder.QueryName  = targetQueryFolder.FolderPath.Remove(0, targetQueryFolder.FolderPath.LastIndexOf('/') + 1);
            targetQueryFolder.FolderPath = targetQueryFolder.FolderPath.Remove(targetQueryFolder.FolderPath.LastIndexOf('/'));
            try
            {
                targetQueryFolder.FolderId = TfsStatic.GetWorkItemQuery(false, targetQueryFolder.FolderPath, QueryExpand.minimal, 0).id;
            }
            catch
            {
                string pathLeft = targetQueryFolder.FolderPath;
                do
                {
                    pathLeft = pathLeft.Remove(pathLeft.LastIndexOf('/'));
                    try
                    {
                        targetQueryFolder.FolderId = TfsStatic.GetWorkItemQuery(false, pathLeft, QueryExpand.minimal, 0).id;
                        break;
                    }
                    catch { }
                }while (string.IsNullOrEmpty(targetQueryFolder.FolderId));

                do
                {
                    var nextFolder = targetQueryFolder.FolderPath.Remove(0, pathLeft.Length + 1);
                    if (nextFolder.IndexOf('/') > -1)
                    {
                        nextFolder = nextFolder.Remove(nextFolder.IndexOf('/'));
                    }
                    targetQueryFolder.FolderId = TfsStatic.CreateWorkItemQueryFolder(false, pathLeft, nextFolder).id;
                    pathLeft = $"{pathLeft}/{nextFolder}";
                }while (targetQueryFolder.FolderPath.Length != pathLeft.Length);
            }

            return(targetQueryFolder);
        }
        private static WorkItemQuery TryWriteQuery(WorkItemQuery sourceQuery, TargetQueryInfo targetQueryInfo)
        {
            WorkItemQuery targetQuery;
            var           queryExistsAlready = false;

            try
            {
                var targetFolder = TfsStatic.GetWorkItemQuery(true, targetQueryInfo.FolderId, QueryExpand.minimal, 1);
                if (targetFolder.hasChildren)
                {
                    targetQuery = targetFolder.children.FirstOrDefault(o => o.name.Equals(targetQueryInfo.QueryName, StringComparison.InvariantCultureIgnoreCase));
                    if (targetQuery != null)
                    {
                        queryExistsAlready = true;
                        sourceQuery.id     = targetQuery.id;
                        targetQuery        = TfsStatic.UpdateWorkItemQuery(false, sourceQuery);
                    }
                    else
                    {
                        targetQuery = TfsStatic.CreateWorkItemQuery(false, targetQueryInfo.FolderId, sourceQuery);
                    }
                }
                else
                {
                    targetQuery = TfsStatic.CreateWorkItemQuery(false, targetQueryInfo.FolderId, sourceQuery);
                }
            }
            catch
            {
                if (queryExistsAlready)
                {
                    throw;
                }
                targetQuery = TfsStatic.CreateWorkItemQuery(false, targetQueryInfo.FolderId, sourceQuery);
            }

            return(targetQuery);
        }