Как получить WorkitemCollection из WorkItemStore с помощью метода Query (Ids, QueryString)

#tfs #tfs-workitem

#tfs #tfs-workitem

Вопрос:

Я застрял на одной проблеме, где я хочу получить WorkItemCollection из WorkItemStore . Я знаю, что это может быть возможно с помощью Query() метода.

Но в моем сценарии Query метод не работает, поскольку я использую метод WorkItemStore.Query Method (Int32[], String) . с String аргументом в виде

 Select [System.Id],[System.State],[System.Title],[System.WorkItemType] 
from WORKITEMS 
where [System.WorkItemType] = 'Requirement' and [System.TeamProject] = 'Test_Baseline'
  

Но при выполнении этого запроса он выдает исключение с сообщением как Invalid Query Provided .
Кто-нибудь может сказать, как мне решить эту проблему?
Заранее благодарю.

Комментарии:

1. Этот запрос отлично работает в моей TFS, просто заменив название командного проекта в запросе.

2. @DaveShaw да, этот запрос выполняется нормально, если я попробовал его напрямую в TFS. Но когда я использую этот запрос в методе Query(Int32[], String) , он выдает исключение. Например. WIStore.Query([1,2,3], QueryString) в программе.

3. Я попробовал это с помощью Query (string), я не уверен, почему вы используете эту перегрузку, из вопроса неясно, чего вы хотите достичь, если это просто запрос для элементов с идентификатором, укажите это в предложении where WIQL: ID в (1,2,3)

4. @DaveShaw да, Дэйв, я сделал это, но дело в том, что я хочу знать, почему я не могу использовать Query(int[], String) , поскольку это было задокументировано командой TFS. Поскольку мой запрос выполнен нормально, вызов функции выполнен правильно..

Ответ №1:

@Ankit, исключение, которое я получил при выполнении вашего запроса с использованием Query (Int32[], String) oveload, является:

«Предложения WHERE и ORDER BY строки запроса не поддерживаются в параметризованном запросе».

который, я думаю, объясняет, почему вы не можете запустить этот WIQL, используя эту перегрузку. Вам следует либо удалить предложение WHERE из запроса, либо использовать метод Query (String)

Комментарии:

1. Я думаю, что это правильный ответ. однако, я думаю, что программисты Microsoft — ленивые другие мошенники. В документации не сказано «о, и, кстати, вам нужно проанализировать чертов запрос и удалить все условия, даже если мы не собираемся их рассматривать».

Ответ №2:

Я пришел сюда, потому что пытаюсь реализовать функцию запроса, которая будет обрабатывать запросы как СПИСКА, так и ДЕРЕВА. В итоге я написал что-то вроде этого…

     JArray RunQuery(string wiql)
    {
        var i = wiql.ToLower().IndexOf("from workitemlinks");
        if (i > 0)
        {
            // Handle "Tree" queries
            var query = new Query(Store, wiql);
            var linkInfoList = query.RunLinkQuery();
            var parent = linkInfoList.ToDictionary(link => link.TargetId, link => link.SourceId);
            // Remove all WHERE and ORDER BY from query
            var items = tfs.Store.Query(parent.Keys.ToArray(), wiql.Substring(0, i)   "from workitems");
            var result = JsonUtil.ConvertItemList(items);
            foreach (JObject json in result)
            {
                json["Parent"] = parent[json.Value<int>("ID")];
            }
            return resu<
        }
        // Handle "List" query
        return JsonUtil.ConvertItemList(Store.Query(wiql));
    }
  

Я надеюсь, что кто-то найдет это полезным.