Я подсчитываю строку в своей базе данных доступа. Мои базы данных содержат кинокомпании, фильмы, выпущенные компаниями, и количество проданных фильмов. В базе данных больше информации, чем я упомянул, но для этой проблемы я смотрю только на два столбца. Кинокомпания и фильмы, произведенные этой компанией. Один столбец называется «Компания», а другой — «Кино». Мне нужно сосчитать каждый фильм, снятый кинокомпанией. В базе данных я насчитал шесть разных кинокомпаний. Моя цель - просто отобразить кинокомпанию и количество фильмов, которые она выпустила, в списке.

У меня две большие проблемы. 1. Мой результат не будет отображаться в списке. 2 По словам добрых людей, которые посмотрели мой код. Программа ничего не считает. Вот пример того, что я хочу отобразить

Компания #Кино

Парамаунт 4

20thCenturyfox 8

ЛукасФильм 6

И т.п.

Я думаю, что создается вложенный цикл foreach, и для каждого фильма, созданного определенной компанией, добавьте его в список.

private void tabP3_Click(object sender, EventArgs e)
    {
       foreach (DataRowView row in bindingSource1.List)
        {
            foreach (DataRowView row2 in bindingSource1.List)
            {
              if(((String)row2["Company"]).Equals(row["Movie"]))
                {
                int count = 0;
                count++;
                lbCompany.Items.Add((String.Format("{0,5}", count)));
                }

            }

        }

    }
1
The Cat Guy 14 Окт 2014 в 19:08
Какой у Вас вопрос? В чем ошибка?
 – 
user1666620
14 Окт 2014 в 19:09
3
Не всегда будет считаться 1?
 – 
LarsTech
14 Окт 2014 в 19:09
Я не знаю, к сожалению, моя большая проблема в том, что мой результат не отображается в списке.
 – 
The Cat Guy
14 Окт 2014 в 19:38

2 ответа

Почему бы вам не использовать Linq для достижения решения? Это то, что я бы сделал, в первую очередь, чтобы удовлетворить ваше требование.

Следующее взято из этого post. "данные" должны быть вашей коллекцией... здесь вы получите новый тип, который содержит 2 поля (которые вы можете редактировать / изменять по своему усмотрению). Вы также можете удалить OrderBy.

foreach(var line in data.GroupBy(info => info.metric)
                        .Select(group => new { 
                             Metric = group.Key, 
                             Count = group.Count() 
                        })
                        .OrderBy(x => x.Metric)
{
     Console.WriteLine("{0} {1}", line.Metric, line.Count);
}
0
Community 23 Май 2017 в 15:11

Во-первых, вы наверняка никогда не вводите оператор if, поскольку вы сравниваете на равенство разные объекты. Один объект строки типа данных: (String)row2["Company"] и один объект типа данных System.Data.DataRow row["Movie"]. Далее в каждой итерации вы устанавливаете счетчик обратно на ноль. Так что постарайтесь:

 int count = 0;
 foreach (DataRowView row in bindingSource1.List)
        {
            foreach (DataRowView row2 in bindingSource1.List)
            {
              if((row2["Company"].ToString()).Equals(row["Movie"].ToString()))
                {               
                count++;
                lbCompany.Items.Add((String.Format("{0}", count)));
                }

            }

        }
0
apomene 22 Окт 2014 в 18:35