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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值