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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· DeepSeek+PageAssist实现本地大模型联网
· 手把手教你更优雅的享受 DeepSeek
· Java轻量级代码工程
· 从 14 秒到 1 秒:MySQL DDL 性能优化实战