【问题标题】:Dynamic Lambda Expression For Filtering用于过滤的动态 Lambda 表达式
【发布时间】:2012-03-27 23:50:39
【问题描述】:

我在一个网页上有3个过滤条件

  1. 按下拉来源过滤
  2. 按下拉类别过滤
  3. 在 StartDate 文本框和 EndDate 文本框之间筛选

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

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

【问题讨论】:

    标签: c# linq lambda


    【解决方案1】:

    这是我在自己的代码中用于应用过滤器的模式:

    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();
    

    【讨论】:

    • @NickLaMarca 我看不出有什么理由不这样做。
    • 这将为任何具有有效值的过滤器同时应用所有过滤器。请注意,我假设 GetData() 返回一个 IQueryable 类型的对象,而不是 DataSet,因此您需要将其应用于直接从您的 DataContext 返回的数据。
    • GetData 返回一个带有一个数据表的DataSet
    • 根据数据的大小,如果您可以在客户端过滤数据,您可以使用DataSet.Tables[0].Select().AsQueryable() 之类的东西来获取行集合并应用过滤器。但是,如果您希望在服务器端完成过滤,则需要直接在 IQueryable 上应用过滤器,例如 MyContext.TableName.AsQueryable()
    • 这就是你过滤数据表的方式吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    相关资源
    最近更新 更多