如何使用Linq筛选DataGridView中从第三列起至少2个单元格为指定值的行
纯Linq实现代码
和你原有逻辑完全等价的纯Linq写法如下:
var filteredRows = myDataGridView.Rows .Cast<DataGridViewRow>() .Where(row => row.Cells .Cast<DataGridViewCell>() .Count(x => x.ColumnIndex > 1 && x.Value != null && (int)x.Value == 10) >= 2) .ToList();
优化版(列数多的时候性能更好)
如果表格列数较多,不需要统计所有单元格,只要匹配到2个符合要求的单元格就可以终止当前行的遍历,写法如下:
var filteredRows = myDataGridView.Rows .Cast<DataGridViewRow>() .Where(row => row.Cells .Cast<DataGridViewCell>() .Where(x => x.ColumnIndex > 1 && x.Value != null && (int)x.Value == 10) .Take(2) .Count() >= 2) .ToList();
逻辑说明
两段代码都和你原有实现逻辑完全一致:
- 先对
DataGridView.Rows集合做类型转换,得到可被Linq操作的DataGridViewRow序列 - 对每行统计第三列及之后(列索引>1)、值非空且等于10的单元格数量
- 保留符合「单元格数量≥2」的行,最终转为
List<DataGridViewRow>类型
内容的提问来源于stack exchange,提问作者r-kane
相关产品推荐
相关产品推荐

