0
    queryString = " ..." ;
    ItemIterable<QueryResult> results = session.query(queryString, false);
    // this line simply fails, it doesn't throw an exception.
    for (QueryResult qResult : results) {
       // ....
    }

for-loop を開始する前に結果が空かどうかを確認する方法はありますか?

ありがとう

4

1 に答える 1

0

session.query() メソッドはリポジトリにアクセスしません。リポジトリと通信してクエリを実行できるオブジェクト (「結果」) のみを準備します。この「結果」オブジェクトからプルしない限り、結果セットについて何も知りません。あなたの例では、for ループが初めてプルします。結果セットが空の場合、ループはスキップされます。

ループを使用して結果があるかどうかを確認したくない場合は、ループの前にこれを行うことができます。

if (results.getPageNumItems() == 0) {
  // break here
}

getPageNumItems() メソッドは、クエリ結果の最初のバッチ (ページ) を取得します。結果セットが空の場合、この最初のバッチは空です。パフォーマンスに関しては、これを行うか、ループがスキップされたかどうかを確認するかは問題ではありません。どちらもサーバーへの同じラウンドトリップを行っています。

例外をスローするべきではありません。存在する場合は、クエリを確認し、例外によっては、リポジトリ ベンダーに相談してください。

于 2012-10-17T08:27:11.883 に答える