如何使用Query(Ids,QueryString)方法从WorkItemStore获取WorkitemCollection

时间:2014-07-02 06:31:25

标签: tfs tfs2010 tfs2012 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。 任何人都可以告诉我该如何解决这个问题? 谢谢你提前。

2 个答案:

答案 0 :(得分:3)

@Ankit, 使用Query(Int32 [],String)oveload运行查询得到的异常是:

"参数化查询不支持查询字符串的WHERE和ORDER BY子句。"

我认为解释了为什么你不能使用这个重载来运行这个WIQL。您应该从查询中删除WHERE子句或使用Query(String)方法

答案 1 :(得分:0)

我来到这里是因为我正在尝试实现一个能够同时处理LIST和TREE查询的查询函数。最后我写了这样的东西......

    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 result;
        }
        // Handle "List" query
        return JsonUtil.ConvertItemList(Store.Query(wiql));
    }

我希望有人觉得这很有帮助。