2012-03-27 2 views
1

У меня есть 3 условия фильтра на веб-страницеDynamic Lambda Выражение для фильтрации

  1. Фильтр по ниспадающего Источник
  2. Фильтр по ниспадающего Категория
  3. Filter By Между StartDate текстовое поле и EndDate текстовое поле

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

Может кто-нибудь помочь мне настроить это с помощью лямбда-выражений?

+0

Является ли это ASP.NET, MVC, ...? –

ответ

7

Это образец, который я использую в своем собственном коде для применения фильтров:

var data = GetData(); 

var sourceFilter = SourceDropDown.Value; 
if (!string.IsNullOrEmpty(sourceFilter)) 
    data = data.Where(d => d.Source == sourceFilter); 

var categoryFilter = CategoryDropDown.Value; 
if (!string.IsNullOrEmpty(categoryFilter)) 
    data = data.Where(d => d.Category == categoryFilter); 

DateTime startDateFilter, endDateFilter; 
if (DateTime.TryParse(TxtStartDate.Text, out startDateFilter) && 
    DateTime.TryParse(TxtEndDate.Text, out endDateFilter)) 
    data = data.Where(d => d.DT >= startDateFilter && d.DT <= endDateFilter); 

return data.ToList(); 
+0

@NickLaMarca Я не вижу причин, почему это не так. – flai

+0

Это применит все фильтры одновременно для любого из фильтров, имеющих допустимое значение. Обратите внимание, что я предполагаю, что 'GetData()' возвращает объект типа 'IQueryable', а не' DataSet', поэтому вы захотите применить его к данным, которые были непосредственно возвращены из вашего DataContext'. – mellamokb

+0

GetData возвращает DataSet с одним datatable –