Как считать дубликаты в Datagridview в C # - PullRequest
0 голосов
/ 07 марта 2012

как это сделать?

Я нашел этот код в Как считать дубликаты в списке с помощью LINQ :

 var list = new List<string> { "a", "b", "a", "c", "a", "b" };

        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 };
        foreach (var x in q)
        {
            MessageBox.Show("Value: " + x.Value + " Count: " + x.Count);
        }

Но как изменить его для подсчета дубликатов в datagridview? Например, datagridview1 [7, i] где i - количество строк в datagriview.

EDIT

Теперь мой код выглядит так:

      var list = dataGridView1.Rows.OfType<DataGridViewRow>()
       .GroupBy(x => x.Cells["TestValues"].Value)
       .Select(g => new { Value = g.Key, Count = g.Count(), Rows = g.ToList() })
       .OrderByDescending(x => x.Count);

        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 };

        foreach (var x in q)
        {
           // dataGridView1[7, x].Value.ToString();

            MessageBox.Show("Value: " + x.Value + " Count: " + x.Count +"Rows: " );

        }

1 Ответ

1 голос
/ 07 марта 2012

Примерно так должно работать:

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] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...