Вопрос по .net, linq, c# – Подсчитайте различные значения столбца в dataGridView, используя linq в .NET

4

Мне нужно посчитать и представить различные / уникальные значения в dataGridView. Я хочу представить это так, и этот код прекрасно работает со списками.

        List<string> aryIDs = new List<string>();
        aryIDs.Add("1234");
        aryIDs.Add("4321");
        aryIDs.Add("3214");
        aryIDs.Add("1234");
        aryIDs.Add("4321");
        aryIDs.Add("1234");

        var result= aryIDs.GroupBy(id => id).OrderByDescending(id => id.Count()).Select(g => new { Id = g.Key, Count = g.Count() });

Но когда я пытаюсь использовать тот же подход для столбца в dataGridView, я получаю сообщение об ошибке, в котором говорится, что groupBy не может использоваться в моем dataGridView.

        DataGridView dataGridView1= new DataGridView();
        dataGridView1.Columns.Add("nr", "nr");
        string[] row1 = new string[] { "1234" };
        string[] row2 = new string[] { "4321" };
        string[] row3 = new string[] { "3214" };
        string[] row4 = new string[] { "1234" };
        string[] row5 = new string[] { "4321" };
        string[] row6 = new string[] { "1234" };

        object[] rows = new object[] { row1, row2, row3, row4, row5, row6 };

        foreach (string[] rowArray in rows)
        {
            dataGridView1.Rows.Add(rowArray);
        }

        var result = dataGridView1.GroupBy(id => id).OrderByDescending(id => id.Count()).Select(g => new { Id = g.Key, Count = g.Count() });

Итак, мой вопрос, как мне адаптировать этот синтаксис linq для работы со столбцом в dataGridView? Если возможно, я не хочу использовать списки вообще.

Ваш Ответ

2   ответа
12

Это будет работать для вашего примера:

var result = dataGridView1.Rows.Cast<DataGridViewRow>()
    .Where(r => r.Cells[0].Value != null)
    .Select (r => r.Cells[0].Value)
    .GroupBy(id => id)
        .OrderByDescending(id => id.Count()) 
        .Select(g => new { Id = g.Key, Count = g.Count() });
3

Я думаю, что это сработает, но я не уверен на 100%. Попробуйте, если у вас есть какие-либо проблемы, дайте мне знать ...

var distinctRows = (from GridViewRow row in dataGridView1.Rows 
                    select row.Cells[0]
                   ).Distinct().Count();
он будет подсчитывать все отдельные значения, но не будет подсчитывать каждое из отдельных значений, что и делает OP в примере списка
Это помогло мне, но это должно бытьfrom DataGridViewRow а такжеrow.Cells[0].Value

Похожие вопросы