【发布时间】:2012-03-27 23:50:39
【问题描述】:
我在一个网页上有3个过滤条件
- 按下拉来源过滤
- 按下拉类别过滤
- 在 StartDate 文本框和 EndDate 文本框之间筛选
我目前正在从表中取回所有行并将它们放入数据集中。我现在希望能够根据用户可能输入的上述过滤器的任何组合来过滤该数据集。或者也许用户选择不输入过滤器。
有人可以帮我使用 lambda 表达式进行设置吗?
【问题讨论】:
我在一个网页上有3个过滤条件
我目前正在从表中取回所有行并将它们放入数据集中。我现在希望能够根据用户可能输入的上述过滤器的任何组合来过滤该数据集。或者也许用户选择不输入过滤器。
有人可以帮我使用 lambda 表达式进行设置吗?
【问题讨论】:
这是我在自己的代码中用于应用过滤器的模式:
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();
【讨论】:
GetData() 返回一个 IQueryable 类型的对象,而不是 DataSet,因此您需要将其应用于直接从您的 DataContext 返回的数据。
DataSet.Tables[0].Select().AsQueryable() 之类的东西来获取行集合并应用过滤器。但是,如果您希望在服务器端完成过滤,则需要直接在 IQueryable 上应用过滤器,例如 MyContext.TableName.AsQueryable()。