2015-07-11 3 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 }; 

Я хотел бы быть в состоянии сказать, фильтр в OrderID или сказать CONTACTNAME. Я только учусь, пожалуйста, будьте осторожны, но любая помощь будет принята с благодарностью! Вот также снимок, чтобы помочь, если мои объяснения не будут достаточно хорошими.

Filter using text box located in the search tab header.

ОК, я получил от этого 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, каким образом вы хотите, чтобы ваш вход был фильтром? Как вы узнаете, вводит ли пользователь идентификатор заказа или имя клиента или что-то еще? Можете ли вы написать псевдокод (забудьте о linq, эта информация о реализации) о том, как ваша система должна работать? – Andrei

+0

В принципе, как только пользователь редактирует содержимое текстового поля, какая-то форма проверки проверяет, имеет ли место поле «Контактное имя». Содержит любой введенный текст, возможно, используя .Contains(). –

Смежные вопросы