1

私は2つの形式の通話を試しました.これは

 products = DocumentSession.Query<Product>()
      .Statistics(out stats)
      .Where(p => p.INFO2.StartsWith(term1))
      .Where(p => p.INFO2.StartsWith(term2))
      .Where(p => p.INFO2.StartsWith(term3)) 
      .OrderByField(columnToSortBy, columnToSortByAsc)
      .Skip(pageIndex * pageSize)
      .Take(pageSize)
      .ToList()
      ;

そしてこのように

  products = DocumentSession.Query<Product>()
      .Statistics(out stats)
      .Where(p => p.INFO2.StartsWith(term1) & p.INFO2.StartsWith(term2) & p.INFO2.StartsWith(term3))
      .OrderByField(columnToSortBy, columnToSortByAsc)
      .Skip(pageIndex * pageSize)
      .Take(pageSize)
      .ToList()
      ;

最初のものは私の期待に沿ったレコードを返しますが、2 番目のものは Product タイプのすべてのドキュメントを返すようです。LINQ式の観点から見た2つの違いは何ですか?私が達成しようとしていることを否定する可能性のあるものを見落としていませんか?

編集: Russ ごとに修正されたコード。

  string t1 = terms[0];
  string t2 = terms[1];
  string t3 = terms[2];

  products = DocumentSession.Query<Product>()
      .Statistics(out stats)
      .Where(p => p.INFO2.StartsWith(t1) && p.INFO2.StartsWith(t2) && p.INFO2.StartsWith(t3)) 
      .OrderByField(columnToSortBy, columnToSortByAsc)
      .Skip(pageIndex * pageSize)
      .Take(pageSize)
      .ToList()
      ;

編集2:これは、キーボード、またはその他の固体オブジェクトで顔を下に叩きつける場所です...標準のC#AndおよびOrを使用して、ここで基本に戻らなければなりません

ありがとう、スティーブン

4

1 に答える 1

2

2 番目のブロックでは、&& の代わりに & を実行しているため、AND 比較ではなく、ビット演算を実行しようとしています。

編集:2番目のケースでは、これを変更できます:

.Where(p => p.INFO2.StartsWith(terms[0]) & p.INFO2.StartsWith(terms[1]) & p.INFO2.StartsWith(terms[2]))

これに:

.Where(p => p.INFO2.StartsWith(terms[0]) && p.INFO2.StartsWith(terms[1]) && p.INFO2.StartsWith(terms[2]))

これにより、適切な AND 句になります。

2 番目の編集: これが AND 演算を意図している場合、3 つの用語は必要ありません。単一の用語が必要です。それ以外の場合は、同じ文字列の 3 つのインスタンスと比較することになります。

terms[0] = "test";
terms[1] = "test";
terms[2] = "test";

.Where(p => p.INFO2.StartsWith(terms[0]) && p.INFO2.StartsWith(terms[1]) && p.INFO2.StartsWith(terms[2]))

と同じです

string term = "test";

.Where(p => p.INFO2.StartsWith(term) && p.INFO2.StartsWith(term) && p.INFO2.StartsWith(term))

これについて言及するだけで、将来的にコードを維持するのが難しくなる可能性があります。

于 2012-04-04T00:33:35.767 に答える