2015-07-11 130 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()。 –