2012-01-12 15 views
0

2つの異なる結果が得られていますが、どのようにデータベースにクエリしても同じ結果が得られると思います。クエリ1の結果では、私は2つの異なるクエリ - 矛盾した結果を返す

のような値のペアのリストを取得していますNY 3

AL 6

WI 5

など。

しかし、私は、クエリを実行すると2私の価値が正確かどうかをテストします。私が特に走って州 "NY"に着くと、NYと全く違う数字になっています。彼らはどんな状態にもマッチしていません。私は、正確な数字がどれであるかは分かりません。

クエリ1:

//Edit 
int countTheaters = session.Query<Theaters>() 
         .Count(); 

var TheaterByStateList = session.Query<Theaters>() 
         .Take(countTheaters) 
         .ToList() 
         .GroupBy(x => x.State) 
         .OrderBy(x =>x.Count()) 
         .ToDictionary(x => x.Key, x => x.Count()); 

クエリ2:

int TheaterCountByState = session.Query<Theaters>() 
          .Where(x => x.State== "NY") 
          .Count(); 
+0

管理ツールを使用してデータベースに照会するだけであれば、 –

+1

ZVenue、あなたは本当にRavenDBから何を期待していますか?あなたはここでいくつかの質問をしてきましたが、poepleは良い答えをくれましたが、すべてを厳密に無視しているようです。また、ravensのウェブサイト、ブログ、サンプルアプリなどで簡単に利用できるすべてのベストプラクティスの例も無視しているようです。あなたの奇妙な命名規約(クラス名や大文字の変数には複数形)とは関係ありませんが、グループ化のためにインデックスを使用した場合(最後の質問を参照)、これは問題にはなりません。 Btw。あなたの問題を引き起こす.Ta​​ke()の間違った使い方です。正直言って申し訳ありません。 –

+1

.Take()の場合 - >には制限がありますので、5000以上の大きさを指定しても、sever-configで定義されている項目数だけが返されます。 –

答えて

1

これは、.Take()がRavenDBサーバー設定で設定されているレコードの最大数を返すためです。これは、あなたが早期に(開発中に)失敗し、ページングの手段を知らない場合に起こりうる多くの痛みを回避するのに役立つ、設計者が安全に設計した設計者の哲学(人々が一般的に実行するものNHibernateまたはEF2に)。

デフォルトでは、何も指定せずに128レコードしか取得できません。クライアント上でそれを変更することはできますが、サーバに設定されている数よりも一度に多くのレコードを取得することはできません(1024と思っていますが、とにかく気にする必要はありません - 誰かがこれらの制限を変更する理由はありません)。

2

私たちはあなたのスキーマを知らないので、それは言うのは難しいです。しかし、私はあなたの問題はここにあるかなり確信している:あなたの他のクエリの例では、データベース内のすべての行にカウントしながら、これは、あなただけの最初のcountTheaters行であなたのグループ化を実行する意味

.Take(countTheaters) 

+0

申し訳ありませんが、私はそこに行がありませんでした。私は自分のコードを更新... countTheatersはレコードの総数です..したがって、両方のクエリは同じ数字になるはずです。 – ZVenue

+0

countTheatersは列挙可能のカウントに設定されているので、すべてを取る必要があります。コードが実際に難読化され、2つの呼び出しの間で数が変化しない限り、 –

+0

コードから明らかな他の重要な相違点は、メモリ内でグループ化し、データベース上の "NY"のインスタンスをカウントすることです。それは違い(照合設定/大文字と小文字の区別)を引き起こす可能性がありますか?ここでも、データにアクセスすることなく話すことは難しいです。 – driis

関連する問題