Ricerca in una DataGridView tramite Linq #2

Nel post Ricerca in una DataGridView tramite Linq avevo illustrato alcune query Linq che possono tornare utili per ottenere collection di row di una DataGridView non esposte nativamente.

Sempre tramite Linq è ad esempio possibile ottenere la collection delle celle di una determinata colonna, nell’esempio seguente la query Linq per ottenere le celle della collonna colID della DataGridView grdMain:

Dim celleColonna = (From r In Me.grdMain.Rows
Select DirectCast(r, System.Windows.Forms.DataGridViewRow).Cells).Select(
Function(c) c.Item(Me.colID.Index))

Il codice può poi essere utilizzato per creare un Extension Method che aggiunga agli oggetti  DataGridView un metodo GetColumnCells e un metodo GetColumnSelectedCells:

<System.Runtime.CompilerServices.Extension()>
Public Function GetColumnCells(ByVal grid As System.Windows.Forms.DataGridView, column As System.Windows.Forms.DataGridViewColumn) As System.Collections.Generic.IEnumerable(Of System.Windows.Forms.DataGridViewCell)
Return (From r In grid.Rows
Select DirectCast(r, System.Windows.Forms.DataGridViewRow).Cells).Select(
Function(c) c.Item(column.Index))
End Function

<System.Runtime.CompilerServices.Extension()>
Public Function GetColumnSelectedCells(ByVal grid As System.Windows.Forms.DataGridView, column As System.Windows.Forms.DataGridViewColumn) As System.Collections.Generic.IEnumerable(Of System.Windows.Forms.DataGridViewCell)
Return grid.GetColumnCells(column).Where(Function(c) c.Selected)
End Function