我在访问数据库中计算了一行。我的数据库包含电影公司,公司制作的电影和销售的电影数量。数据库中的信息比我提到的要多,但对于这个问题,我只看两列。电影公司和该公司制作的电影。一列称为公司,另一列称为电影。我需要统计电影公司制作的每部电影。我在数据库中统计了六家不同的电影公司。我的目标是简单地显示电影公司及其在列表框中制作的电影数量。
我有两大问题。 1.我的结果不会显示在列表框中。 2根据看我的代码的好人说。该计划没有计算任何东西。以下是我想要展示的示例
公司#Movies
派拉蒙4
20thCenturyfox 8
LucasFilm 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)));
}
}
}
}
答案 0 :(得分:0)
为什么不使用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);
}
答案 1 :(得分:0)
首先,您绝不会输入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)));
}
}
}