C#实现TFS共享查询结果缺陷ID逗号分隔单行输出问题
解决TFS查询结果缺陷ID逗号分隔同行输出的问题
你的问题根源很清楚——现在代码里每次循环都单独调用tw.WriteLine输出单个ID,自然会导致每个ID占一行。咱们可以用两种思路来修改,都能实现你要的“同一行逗号分隔”效果:
方法1:先收集所有ID,一次性写入(简单直观)
先把所有缺陷ID收集到一个集合里,用String.Join把整个集合拼成逗号分隔的字符串,最后只写一次到文件。这种方式代码简洁,可读性强:
Dictionary<string, string> variables = new Dictionary<string, string>(); variables.Add("project", tfsQuery.Project.Name); var results = witStore.Query(tfsQuery.QueryText, variables); // 收集所有ID到列表 var defectIds = new List<string>(); foreach (WorkItem item in results) { defectIds.Add(item.Id.ToString()); } // 拼接成逗号分隔的字符串并写入 tw.WriteLine(string.Join(",", defectIds)); tw.Close();
要是想用LINQ简化收集步骤,还能写成一行:
var defectIds = results.Select(item => item.Id.ToString()).ToList();
方法2:逐行控制输出格式(适合超大量结果)
如果查询结果特别多,不想把所有ID都存在内存里,可以在循环里控制输出逻辑:第一个ID直接写,后续每个ID前加逗号,最后再补换行。这样不用占用额外内存存储整个ID列表:
Dictionary<string, string> variables = new Dictionary<string, string>(); variables.Add("project", tfsQuery.Project.Name); var results = witStore.Query(tfsQuery.QueryText, variables); bool isFirstItem = true; foreach (WorkItem item in results) { var id = item.Id.ToString(); if (isFirstItem) { tw.Write(id); // 第一个ID直接输出,不加前置逗号 isFirstItem = false; } else { tw.Write("," + id); // 后续ID前面加逗号 } } tw.WriteLine(); // 最后添加换行符 tw.Close();
两种方法都能达到你要的预期效果,第一种适合大多数场景,第二种更适合处理大数据量的查询结果,你可以根据实际情况选择。
内容的提问来源于stack exchange,提问作者Satish Dhanaraj
相关产品推荐
相关产品推荐

