2011-01-12 17 views
1

RavenDB Luceneインデックスでクエリを実装し、結果をページングしようとしています。Skip and Takeを使用したRavenDBページングが機能しない

Iは、次のコードを持っている:

 IDocumentQuery<Post> q = Session.Advanced.LuceneQuery<Post, Posts_Search>() 
      .WhereContains("BodyHtml", query) 
      .OrElse() 
      .WhereContains("Title", query) 
      .AddOrder("Published", true) 
      .Skip(4).Take(4); 

(最後スキップ一対のテイクは、単純な例のために添加しました)。

このクエリは、私が期待するように、4つではなく、私のクエリに一致する22のドキュメントをすべて返します。

私は間違っていますか?

+0

クエリで.ToString()を呼び出すと、ワイヤを介して送信される実際の文字列が取得されます。これはクエリのためのものですか? –

+0

@Matt、ToString()は "BodyHtml:net OR Title:net"を返し、Skip/Takeを適用する前と後の両方でこれを行います。 Session.Query でこれを行うと、ページングは​​期待通りに機能します。これがバグかどうか疑問に思います。 – driis

答えて

2

(あなたは、あなたがまだ最初のDBからすべてのレコードを取得することになる注意して、スキップしてくださいするオブジェクトへのLINQを使用することになります)。

私は今、最新の不安定なビルド(251)をダウンロードしました。このビルドでは、私のコードは期待通りに動作します。私が使っていたバージョンのバグだと思う。私がRavenDBグループの私の質問からより意味のある洞察を得るなら、私はここにそれを確実に投稿します。

0

私はRavenDBを知らないのでここで推測します。しかし、おそらくRavenプロバイダはスキップまたはテイクをサポートしていません。

.AddOrderの後にIEnumerableに変換してみることができます。この問題は、最新の安定ビルド(206)にoccuringた

... 
    .AddOrder("Published",True) 
    .AsEnumerable() 
    .Skip(4).Take(4); 
+0

Skip and Takeは、ドキュメントおよび例に従ってサポートされる必要があります。そして、私は実際にページングがサーバー上で発生する必要があります。 – driis

+0

何が.AddOrderリターン?それはクエリ可能です?私はその部分を書いたので、私は知っている;-) –

+1

Skip/Takeはサポートされています。 LINQプロバイダの構築に関するブログシリーズ。シリーズを.Net 4.0にアップデートすることをお考えですか? –

関連する問題