如何使用LINQ获取DataGridView单元格值

2 c# linq datagridview

是否可以使用 LINQ 查询来接收突出显示的单元格的值?在下图中,我只能对 DatGridView 中突出显示的单元格进行计数,并将计数值传递到列表框中。

var foundColor = dataGridView1.Rows.Cast<DataGridViewRow>().Select(row => new 
{  
  Count = row.Cells.Cast<DataGridViewCell>().Count(c => c.Style.BackColor == Color.Yellow),
  Name = row.Cells.Cast<DataGridViewCell>().Where(x => x.Style.BackColor == Color.Yellow)
}).ToList();

foundColor.ForEach(s => listBox3.Items.Add($"{s.Count},{s.Name}"));

Run Code Online (Sandbox Code Playgroud)

DataGridView 示例

Hol*_*ger 5

您可以使用 SelectMany 创建单元格的平面列表。

dataGridView1.Rows.Cast<DataGridViewRow>().SelectMany(row => row.Cells.Cast<DataGridViewCell>())
Run Code Online (Sandbox Code Playgroud)

现在您有了一个 IEnumerable,您可以使用 Count、Where、或 Select 单元格的值。

计数和选择不能在同一迭代中执行。那将是两个查询。

但是,就性能而言,将结果放入数组或列表中并获取该列表的长度将是更好的主意。

var list =     dataGridView1.Rows.Cast<DataGridViewRow>()
    .SelectMany(row => row.Cells.Cast<DataGridViewCell>())
    .Where(x => x.Style.BackColor == Color.Yellow)
    .Select(cell => cell.Value)
    .ToList();
int count = list.Count;
Run Code Online (Sandbox Code Playgroud)