2014-05-09 64 views
0

以下是UI:使用與動態LINQ庫加入

enter image description here

這是代碼片段我使用火動態where子句:

public void bind() 
{ 
string filter = ""; 
      if (!string.IsNullOrEmpty(txtPart.Text)) 
      { 
       filter = filter + "masterinv.inv_item_id = " + txtPart.Text; 
      } 
      if (!string.IsNullOrEmpty(txtDescription.Text)) 
      { 
       if (!string.IsNullOrEmpty(filter)) 
       { 
        filter = filter + " || masterinv.description = " + txtDescription.Text; 
       } 
       else 
       { 
        filter = filter + "masterinv.description = " + txtDescription.Text; 
       } 


      } 
      if (!string.IsNullOrEmpty(txtVendor.Text)) 
      { 
       if (!string.IsNullOrEmpty(filter)) 
       { 
        filter = filter + " || vendor.vendor_name = " + txtVendor.Text; 
       } 
       else 
       { 
        filter = filter + "vendor.vendor_name = " + txtVendor.Text; 
       } 

      } 
InventoryDataContext dc = new InventoryDataContext(InventoryDBContext.GetConnectionstring()); 
       var searchResult = (from masterinv in dc.OMS_REF_Master_Inventories 
            join vendor in dc.OMS_REF_Vendors on masterinv.inv_item_id equals vendor.inv_item_id 
            Where(filter) 
            select new OMS_REF_Master_Inventory 
            { 
             inv_item_id = masterinv.inv_item_id, 
             description = masterinv.description, 
             unit_of_measure = masterinv.unit_of_measure, 
             lot_id = masterinv.lot_id, 
             serial_id = masterinv.serial_id, 
             mfg_id = masterinv.mfg_id, 
             mfg_item_id = masterinv.mfg_item_id, 
             item_status_current = masterinv.item_status_current, 
             cm_unit_cost = masterinv.cm_unit_cost, 
             sync_dte = masterinv.sync_dte 
            }).ToList(); 
        searchResult; 
} 

在上面的代碼過濾器創建在組合框和文本框 的選擇組合的基礎上。

在這些一個過濾器的是:

masterinv.inv_item_id = 'A' || masterinv.description = 'F' || vendor.vendor_name = 'V' 

它可能會發生變化取決於組合框值選擇。 BuildQueryFilter方法中存在組合框的所有情況。

問題:

我不能開火where子句中加入此。我哪裏出錯了?

+1

擺出一個斷點並檢查您的最終過濾條件是什麼? – tarzanbappa

+0

這是我得到的過濾器:masterinv.inv_item_id like'%A%'or masterinv.description like'F%'or vendor.vendor_name like''V' – Sunny

+0

它可能因組合框值的選擇而有所不同。 – Sunny

回答

0

我認爲你不能在linq查詢中使用那些%。取而代之的

可以使用Contains()/StartsWith()/EndsWith()

參照本作的詳細信息...

How to do SQL Like % in Linq?

How to do a LIKE query with linq?

或者

使用SQL方法..

where SqlMethods.Like(c.CustomerName, "%/abc/%") 
+0

好吧,忽略%你可以使用簡單的等號並使用where子句運行嗎? – Sunny

+0

是的,你可以,然後你不需要關鍵字**喜歡**,而不是那些你可以使用標誌。 – tarzanbappa

+0

請檢查我已更新我的問題。 – Sunny