2015-07-11 122 views
-1

我正在尋找將基於用戶輸入的查詢過濾到文本框並在列表框中顯示結果。我知道這可以做,但我似乎無法找到正確的方向。以下是我想要篩選的查詢和示例:如何過濾LINQ查詢。在ListBox控件中顯示結果

var q2 = from o in db.Orders 
       orderby o.OrderDate descending 
       join c in db.Customers on o.CustomerID equals c.CustomerID 
       select new { Customer = c.ContactName, orderDate = o.OrderDate, orderID = o.OrderID }; 

我希望能夠過濾訂單ID或說ContactName。我只是學習,所以請溫柔,但任何幫助將不勝感激!如果我的解釋不夠好,這也是一個快照。

Filter using text box located in the search tab header.

OK,我得到這個從Andrie!它是一個開始,但不確定實際過濾的方向。

`var q2 = from o in db.Orders 
        orderby o.OrderDate descending 
        join c in db.Customers on o.CustomerID equals c.CustomerID 
        select new { Customer = c.ContactName, orderDate = o.OrderDate, orderID = o.OrderID }; 

      if (tbxSearch.Text != null) 
      { 
       q2 = q2.Where(); 
      } 

      lbxQ2.ItemsSource = q2;` 

回答

1

您正在查找where子句。

如果你從哪個字段應該被過濾(動態領域過濾是一項複雜得多)的輸入都知道,你可以做一些沿着這些路線:

var q2 = from o in db.Orders 
      orderby o.OrderDate descending 
      join c in db.Customers on o.CustomerID equals c.CustomerID 
      select new { Customer = c.ContactName, orderDate = o.OrderDate, orderID = o.OrderID }; 

if (customer name filter is not empty) 
{ 
    q2 = q2.Where(x => x.Customer == <customer name filter value>); 
} 

if (order id filter is not empty) 
{ 
    q2 = q2.Where(x => x.OrderID == <order id filter value>); 
} 

當然上面只是一個僞代碼顯示基本想法,您應該根據您的要求實際應用過濾器。

+0

不太明白,所以我通過編輯你的輸入問題來闡述。我希望文本框的內容是過濾器。 –

+0

@RyanSpain,你希望你的輸入是一個過濾器?您如何知道用戶是否輸入了訂單ID或客戶名稱或其他信息?你能寫一個關於你的系統應該如何工作的僞代碼(忘記linq,這是實現細節)嗎? – Andrei

+0

基本上,一旦用戶編輯了文本框的內容,某種形式的實現檢查以查看是否說'ContactName'字段包含任何輸入的文本,可能使用.Contains()。 –