6

TFS APIに取り組んでいますが、TFS APIにLIMITキーワードなどがあるかどうかわかりません。ページングには、TFSAPIが必要です。

ありがとう

4

2 に答える 2

5

TFS WIQL には SQL キーワードに相当するものはありませんLIMIT。ページングを自分で実装する必要があります。

1 つの方法は、最初のアクセスですべての結果を取得し、それらをキャッシュして自分でページングすることです。

もう 1 つの方法は、ユーザーがページを表示するたびに WIQL クエリを動的に構築することです。例えば:

  1. WIQL クエリを実行して、クエリに一致する作業項目 ID のみを返します。SELECT [System.Id] FROM WorkItems WHERE <conditions>
  2. その ID リストをキャッシュする
  3. その ID のリストを、ページング サイズに一致するグループに分割します
  4. ユーザーがページを表示するたびに、ワークアイテムを ID で明示的にリクエストします。SELECT <fields> FROM WorkItems WHERE [System.Id] IN (10,11,12,13,14,15)

達成しようとしていることに応じて、応答時間を最大化するために、TFS Work Item Tracking API がフィールド値の内部でページング/遅延読み込みを実装していることも知っておく必要があります。ネットワーク スニファーを接続し、Visual Studio で大きな作業項目クエリをスクロールすると、これがどのように機能するかを確認できます。

詳細については、フィールド値のページングを参照してください。

コードで使用するすべてのフィールドを選択することで、サーバーへのラウンド トリップを最小限に抑えることができます。次のコードは、クエリに対して 1 回の往復を行い、新しいページがアクセスされるたびにタイトルのページを返すために 1 回の往復を行います。

WorkItemCollection results = WorkItemStore.Query(
    "SELECT Title FROM Workitems WHERE (ID < 1000)");

foreach (WorkItem item in results)
{
    Console.WriteLine(item.Fields["Title"].Value);
}

SELECT 句で指定していないフィールドにコードがアクセスする場合、そのフィールドはページ化されたフィールドのセットに追加されます。そのページを更新してそのフィールドの値を含めるために、別の往復が実行されます。

于 2013-02-01T12:20:35.657 に答える
1

同じ問題がありました。Takeシーケンスに適用して、クエリによって得られる結果を制限しました。残念ながら、これはデータベースから返される結果を実際に制限するものではありませんが、この機能はサポートされていないため、実行可能なオプションを提供します。

Me.mWorkItems.Query(pstrSQL).OfType(Of WorkItem)().Take(5)

Skipと を一緒に使用するとTake、ページングに使用できます。

于 2013-10-08T20:48:37.813 に答える