zoukankan      html  css  js  c++  java
  • c# linq.Where+Func<object,bool>筛选数据

    界面上的DataGridView绑定数据List<StudentScore>,其中StudentScore有五个属性:Name,Gender,Age,Major,Score.筛选的关键词有两个:Major和Score。

    public class StudentScore
    {
        public string Name { get; set; }
        public string Gender { get; set; }
        public int Age { get; set; }
        public string Major { get; set; }
        public int Score { get; set; }
    }

    要点一:根据界面传递的数据查找和筛选数据的方法,无非是查找控件的值,同时通过一些标记来匹配相应的属性,来组合查找条件。个人喜欢用Tag和Text来保存这些值。

    要点二:用Linq的Where子句可以很方便的从集合中筛选子句,麻烦的是组合Where的条件。

    要点三:我们知道,Linq的查找语句可以多个Where条件组合查询,那么只需要传递每个Where的Func<Object,bool>到Where就可以了。到此,我们就知道应该在控件的Tag属性里面写什么了。

    rdo.Tag =  x => x.Score > scoreGrade[scoreGrade.Count - 1];

    再监视rdo的Click事件,Click事件触发后,将rdo.Tag值赋予给类下的局部变量。

    Func<StudentScore, bool> filterMajor = x => true, filterScore = x => true;
    void Radio_Click(object sender, string key)
    {
        var radio = sender as RadioButton;
        if (radio == null || radio.Tag == null || !(radio.Tag is Func<StudentScore, bool>)) return;
        if (key == "major") filterMajor = radio.Tag as Func<StudentScore, bool>;
        else if (key == "score") filterScore = radio.Tag as Func<StudentScore, bool>;
        DoQuery();//同时触发查询事件,绑定新结果
    }
    rdo.Click += (a, b) => Radio_Click(a, key);

    最后组合Where语句:

    void DoQuery()
    {
        var search = datas.Where(filterMajor).Where(filterScore).ToList();
        dataGridView1.DataSource = search;
    }

    源代码:FilterSearch.rar。运行环境.net 4.0

  • 相关阅读:
    VS2010、SQL Server 2008和SQL Server 2012安装详解
    IIS服务寄宿
    C#中错误:不包含适合于入 口点的静态“Main”方法 的解决方法
    硬件的一些性能指标
    SATA SAS SSD 硬盘介绍和评测
    mysql数据库锁定机制
    mysql日志设置优化
    MySQL硬件瓶颈分析
    可扩展性设计之数据切分
    硬件环境对系统性能的影响
  • 原文地址:https://www.cnblogs.com/icyJ/p/3130756.html
Copyright © 2011-2022 走看看