DataTable количество одинаковых записей

276
11 июня 2018, 00:40

Товарищи, есть DataTable в нем есть столбец Article.

Как записать в массив(или куда лучше будет) количество встречающихся записей.

Например есть 5 записей

  1. 228
  2. 105
  3. 228
  4. 100
  5. 105

Мне надо чтобы он записал что

228 - 2 раза

105 - 2

100 - 1

Как и куда лучше записать?

знаю как в переменную записать по конкретному критерию, а надо чтобы он выписал что встретилось и сколько.

FaceOutCount = dt.AsEnumerable().Where(x => x["ФИО подозреваемого"].ToString() == "н/л").ToList().Count;

Мне потом надо будет переписать это в Word (но это я сам)

Надеюсь доходчиво написал, на словах проще звучит ))

Помогите)

Answer 1

Если я правильно уловил суть задания, то без лишних заморочек вот код

 public static DataTable GetTable()
        {
            // Here we create a DataTable with four columns.
            DataTable table = new DataTable();
            table.Columns.Add("id", typeof(int));
            table.Columns.Add("numOfArticle", typeof(int));
            table.Rows.Add(1, 228);
            table.Rows.Add(2, 105);
            table.Rows.Add(3, 228);
            table.Rows.Add(4, 100);
            table.Rows.Add(5, 105);
            return table;
        }
        static void Main(string[] args)
        {
            DataTable dt = GetTable();
            Dictionary<int, int> dictStats = new Dictionary<int, int>(); 
            foreach (DataRow row in dt.Rows)
            {
                if (!dictStats.ContainsKey(row.Field<int>(1)))
                    dictStats.Add(row.Field<int>(1), 1);
                else
                    dictStats[row.Field<int>(1)]++;
            }
            Console.WriteLine("Press any key...");
            Console.ReadKey();
        }

Здесь цикл по строкам, но, очевидно, аналогично будет, если организовать по столбцам.

Answer 2
//Для теста.
var list = new List<int> {228, 105, 228, 100, 105};
//Основной код (группируем итемы по определенному значению, 
//создаем новое отображение, где в анонимные типы вносим кол-во элементов в группе
//и сам элемент). 
var count = list.GroupBy(g => g)
    .Select(s => new {Id = s.Key, Count = s.Count()});
//Выводим результат (пример того, как обращаться).
foreach (var item in count)
    Console.WriteLine($"Число: {item.Id} | Кол-во: {item.Count}");

Вывод:

Число: 228 | Кол-во: 2    
Число: 105 | Кол-во: 2    
Число: 100 | Кол-во: 1    
Answer 3
            //Колво статей
            int[] countArticle = new int[dt.Rows.Count];
            string[] nameArticle = new string[dt.Rows.Count];
            for (int i = 0;i < dt.Rows.Count; i++)
            {
                nameArticle[i] = dgvArchive.Rows[i].Cells[2].Value.ToString();
                countArticle[i] = 0;
                for(int j = 0; j < dt.Rows.Count; j++)
                {
                    if (nameArticle[i] == dgvArchive.Rows[j].Cells[2].Value.ToString())
                    {
                        countArticle[i]++;
                    }
                }
            }
            //Удаляем одинаковые записи
            string n = "";
            for (int i = 0; i < nameArticle.Length; i++)
            {
                n = nameArticle[i];
                for (int j = 0; j < nameArticle.Length; j++)
                {
                    if (n == nameArticle[j] && j != i)
                    {
                        nameArticle = DeleteElementFromMassString(nameArticle.ToList(), j);
                        countArticle = DeleteElementFromMassInt(countArticle.ToList(), j);
                    }
                }
            }

    public string[] DeleteElementFromMassString(List<string> array, int indexToDelete)
    {
        array.RemoveAt(indexToDelete);
        return array.ToArray();
    }
    public int[] DeleteElementFromMassInt(List<int> array, int indexToDelete)
    {
        array.RemoveAt(indexToDelete);
        return array.ToArray();
    }
READ ALSO
Как загрузить UserControl в Grid или StackPanel?

Как загрузить UserControl в Grid или StackPanel?

Создал UserControl и пытаюсь загрузить его на главное окноВ главном окне есть StackPanel и Grid, но куда бы я не пытался добавить UC - одна и та же ошибка...

201
Простое шифрование файла на C#

Простое шифрование файла на C#

У меня простая windows formДве кнопки: одна шифрует файл любым способом, сохраняет файл и в конце расширения дописывает

267