2011-08-09 21 views
0

なぜQueryBuilderはクエリを変更しますか?回避策はありますか?QueryBuilder入力クエリの変更

以下のクエリを入力すると、QueryBuilderは下のより複雑なバージョンにクエリを変更し、FillByメソッドの追加パラメータが必要になります。追加パラメータを追加すると、変更されたクエリに指数関数的な複雑さが加わります。

を入力:

SELECT prop, lot, type, created_on, done 
    FROM TestSelection 
WHERE (prop=? OR '_NO_PROP_'=?) AND (lot=? OR '_NO_LOT_'=?) 

が変更された:

SELECT prop, lot, type, created_on, done 
FROM TestSelection 
WHERE (prop = ?) AND (lot = ?) OR 
     (prop = ?) AND ('_NO_LOT_' = ?) OR 
     (lot = ?) AND ('_NO_PROP_' = ?) OR 
     ('_NO_LOT_' = ?) AND ('_NO_PROP_' = ?) 

目標:ユーザーが小道具、たくさん、またはその両方で検索できるようにします。私の実際のプログラムは、いくつかの追加のフィールドを照会します。

注:

  • のWinFormsプロジェクト(VB.NET該当する場合)
  • TestSelectionは、私がQueryBuilderのいずれかのWHERE条件を削除することを決定したMicrosoft Accessデータベース
+0

まず、どちらか一方または両方で検索したい場合、クエリは単純にprop =ですか? ORロット=?現在、検索はpropまたは_no_prop_に存在する必要があり、ロットまたは_no_lot_に存在する必要がありますが、これは意図していますか? クエリービルダーが自動的にAnd()グループを配布しているようです... – EtherDragon

+0

対応するフィールドが空の場合、VBコードに定数 '_NO_PROP_'と' _NO_LOT_'を指定します。いいえ、ORではなくANDでなければなりません。 rewordされる条件は、(prop:指定されていないORが一致する)AND(ロット:指定されないORがマッチする)の場合に行を返します。 – Steven

+0

は、したがって、次の組み合わせが行を返す: A指定されていないとB、 Aが一致し、Bを指定していない指定されていない、 A指定され、Bが一致し、 Aが一致し、Bは と一致していないが、あなたが期待するもの、それらの条件はありますか? – EtherDragon

答えて

0

でクエリです。代わりに、私はちょうどLINQクエリを使用します。