2011-08-09 51 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是在Microsoft Access數據庫
+0

首先,如果你想通過其中之一或兩者進行搜索,那麼查詢應該簡單地是prop =? OR lot =?目前,搜索需要存在於prop或_no_prop_中,以及存在於lot或_no_lot_中,這是否意味着? 它看起來像查詢生成器是自動分發和跨()分組... – EtherDragon

+0

如果相應的字段爲空,我會在VB代碼中提供常量'_NO_PROP_'和'_NO_LOT_'。不,它應該是'AND'而不是'OR'。如果(prop:未指定或匹配)AND(批次:未指定或匹配),則重新編寫的條件將返回一行。 – Steven

+0

所以下面的組合返回行: 沒有規定A和B未指定, A匹配,未指定B, 一個不指定AND B相匹配, A匹配b匹配 是那些條件,你期待什麼? – EtherDragon

回答

0

我決定刪除的QueryBuilder任何WHERE條件的查詢。相反,我只是使用LINQ查詢。