0

wiql クエリを使用して、チーム プロジェクトのすべての異なるイテレーション パスを取得しようとしています。

私の実際の解決策は次のとおりです。

このクエリを使用します

    public static readonly string IterationPathsQuery = @"SELECT [System.IterationPath] FROM workitems
        WHERE[System.WorkItemType] = 'Requirement'
        OR[System.WorkItemType] = 'Feature'";

関連するすべての WorkItem を取得し、それらを反復処理して、すべての異なる反復パスを取得します。

private void FillIterationPathComboBox(WorkItemStore wiStore)
{
    WorkItemCollection wiCollection = wiStore.Query(Constants.IterationPathsQuery);
    var paths = new List<string>();

    ...
    foreach (WorkItem wi in wiCollection)
    {
        ...

        if (!String.IsNullOrEmpty(wi.IterationPath) && !paths.Contains(wi.IterationPath))
        {
            paths.Add(wi.IterationPath);
        }
    }

    foreach (string path in paths)
    {
        IterationPathComboBox.Items.Add(path);
    }
}

しかし、このソリューションはパフォーマンスが良くありません。使用されている異なる反復パスのみを照会する方法はありますか? 「distinct」がサポートされていないことはすでに読みましたが、まだ考えていなかった方法があるかもしれません。

4

1 に答える 1

0

WIQL クエリは、異なる反復パスをフィルタリングできません。2 つの選択肢があります。

  1. クエリを Excel にエクスポートし、Excel の RemoveDuplicates メソッドを使用して、さまざまな反復パスをフィルター処理できます。

  2. Iteration Paths のリストを取得してから、重複を削除し、LINQ を使用して Distinct レコードを取得できます。この Web サイトのコード スニペットを確認してください。

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    
    namespace AbundantCode  
    {
        internal class Program
        {
            //How to Remove Duplicates and Get Distinct records from List using LINQ ?
    
            private static void Main(string[] args)
            {
                List<Employee> employees = new List<Employee>()
    {
    
    new Employee { EmpID = 1 , Name ="AC"},
    new Employee { EmpID = 2 , Name ="Peter"},
    new Employee { EmpID = 3 , Name ="Michael"},
    new Employee { EmpID = 3 , Name ="Michael"}
    };
    
     //Gets the Distinct List
     var DistinctItems = employees.GroupBy(x => x.EmpID).Select(y => y.First());
                foreach (var item in DistinctItems)
                Console.WriteLine(item.Name);
                Console.ReadLine();
            }
        }
    
        public class Employee
        {
            public string Name { get; set; }
            public int EmpID { get; set; }
        }
    }
    
于 2016-08-17T09:17:37.733 に答える