Примерно так должно работать:
var list = myDataGridView.Rows.OfType<DataGridViewRow>()
.Select(x => x.Cells["MYCOLUMN"].Value.ToString());
var q = from x in list
group x by x into g
let count = g.Count()
orderby count descending
select new { Value = g.Key, Count = count };
, где "MYCOLUMN"
- имя нужного столбца или, альтернативно, вы можете передать индекс столбца.
РЕДАКТИРОВАТЬ:
этот код возвращает список элементов, который также содержит список строк с дублированием:
var q = myDataGridView.Rows.OfType<DataGridViewRow>()
.GroupBy(x => x.Cells["MYCOLUMN"].Value.ToString())
.Select(g => new {Value=g.Key, Count=g.Count(), Rows=g.ToList()})
.OrderByDescending(x => x.Count);
, поэтому, если у вас есть 5 строк, например:
ID MYCOLUMN
0 A
1 B
2 C
3 A
4 B
q
будет содержать 3 элемента:
Key="A", Count=2, Rows={ [0 - A] [3 - A]}
Key="B", Count=2, Rows={ [1 - B] [4 - B]}
Key="C", Count=1, Rows={ [2 - C] }