Я подсчитываю строку в своей базе данных доступа. Мои базы данных содержат кинокомпании, фильмы, выпущенные компаниями, и количество проданных фильмов. В базе данных больше информации, чем я упомянул, но для этой проблемы я смотрю только на два столбца. Кинокомпания и фильмы, произведенные этой компанией. Один столбец называется «Компания», а другой — «Кино». Мне нужно сосчитать каждый фильм, снятый кинокомпанией. В базе данных я насчитал шесть разных кинокомпаний. Моя цель - просто отобразить кинокомпанию и количество фильмов, которые она выпустила, в списке.
У меня две большие проблемы. 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)));
}
}
}
}
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);
}
Во-первых, вы наверняка никогда не вводите оператор 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)));
}
}
}
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.