VB.NET循环统计每本书的作者数
我想数一数表中每本书的作者人数。 我得到的结果不正确 表标题\u AuthorTest: 国际标准书号Au_ID2 第1册-作者1, 第二册-作者2, 第2册-作者3 结果-运行代码后: 2本书,1位作者, 0本书,2位作者, 有3位作者的0本书, 结果应该是: 1本书,1位作者, 1本书,2位作者, 有3位作者的0本书,VB.NET循环统计每本书的作者数,vb.net,loops,foreach,Vb.net,Loops,Foreach,我想数一数表中每本书的作者人数。 我得到的结果不正确 表标题\u AuthorTest: 国际标准书号Au_ID2 第1册-作者1, 第二册-作者2, 第2册-作者3 结果-运行代码后: 2本书,1位作者, 0本书,2位作者, 有3位作者的0本书, 结果应该是: 1本书,1位作者, 1本书,2位作者, 有3位作者的0本书, 我将开始更改SQL命令并使用GROUPBY Dim cmdText = "SELECT ISBN, COUNT(ISBN) as NrAuthors from
我将开始更改SQL命令并使用GROUPBY
Dim cmdText = "SELECT ISBN, COUNT(ISBN) as NrAuthors from Title_AuthorTest
GROUP BY ISBN
ORDER BY COUNT(ISBN) DESC"
ISBNCommand = New OleDbCommand(cmdText, BooksConnection)
现在,您已将所有图书按其ISBN进行分组,每条记录都包含ISBN和该ISBN的作者数量。在这一点上,您的代码可以大大简化
For Each MyRow as DataRow In ISBNTable.Rows
Dim numAuthors As Integer = Convert.ToInt32(MyRow("NrAuthors"))
AuthorCount(numAuthors) += 1
Next
当然,这将允许一本书最多由10位作者撰写。如果有一本书的作者超过10位,我们需要在为AuthorCount数组编制索引之前进行检查,或者更改我们使用不同结构存储此信息的方式因此,如果一本书有两位作者,那么表中有两行吗?这不是表示关系book->author的正确方法。您应该有一个作者表和一个表示图书和作者之间关系的表。此表包含ISBN和authors表的外键。我一直以这种方式编码:
将每个MyRow作为ISBNTable.Rows中的DataRow,并用Dim
删除该行。在你看来,我可能是错的,但我的行似乎只是第一次成为一个新的行。依我看,这总是新的一排。我不确定这是否会改变什么,但这是我首先想到的。关于for
语句如何处理变量,我可能是错的。您使用variableAuthor
时似乎有问题。我建议创建新的var的CurrentISBN
和AuthorsPerISBN
,它们更清楚它们的目的并重新编码。@technonaut我发现作者可能有问题。你能帮我修一下吗?我无法控制它。谢谢,它能工作!我仍然不明白我的foreach语句哪里出错了。要发现实际代码的错误,最好的方法是使用调试器。在进入行循环之前放置一个断点,您将看到Author变量在数组中索引错误的位置。如果您喜欢此解决方案,请务必单击“接受答案”复选标记,这样他们就可以获得帮助解决问题的功劳。我将尝试。谢谢
For Each MyRow as DataRow In ISBNTable.Rows
Dim numAuthors As Integer = Convert.ToInt32(MyRow("NrAuthors"))
AuthorCount(numAuthors) += 1
Next