2012-03-27 237 views
1

我有过滤器的下拉来源动态Lambda表达式用于过滤

  1. 网页上的3个过滤条件
  2. 通过下拉分类过滤
  3. 过滤方式起始日期文本框和结束日期文本框
之间

我目前正在从表中取回所有行并将它们放入数据集中。我想现在能够基于用户可能输入的上述过滤器的任何组合来过滤该数据集。或者,也许用户选择不输入过滤器。

有人可以帮我使用lambda表达式来设置它吗?

+0

这是ASP.NET,MVC,...? – 2012-03-27 15:31:57

回答

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 2012-03-27 15:36:59

+0

这将对具有有效值的任何过滤器同时应用所有过滤器。请注意,我假设'GetData()'返回一个类型为'IQueryable'而不是'DataSet'的对象,所以您需要将它应用于从'DataContext'直接返回的数据。 – mellamokb 2012-03-27 15:37:10

+0

GetData返回带有一个数据表的数据集 – 2012-03-27 15:39:20