我正在开发一个小型的VB.Net应用程序,该应用程序将根据数据库中的多个查询生成Excel工作簿。我有一个返回包含日期(Outage_Date),ID(ID)和问题类型(Issue_Type)的数据表的查询。我试图根据ID和问题类型将它们放在交错的列中,但我很难想出这样做的逻辑。
数据表看起来像这样:
Outage_Date ID Issue_Type
1/1/2010 123 Start
2/5/2010 456 Start
3/17/2011 123 Minor
1/2/2012 123 Major
9/25/2012 456 Major
10/5/2012 456 Minor
输出应如下所示:
Date 123 456
1/1/2010 Start
2/5/2010 Start
3/17/2011 Minor
1/2/2012 Major
9/25/2012 Major
10/5/2012 Minor
如何以编程方式处理此问题?任何帮助表示赞赏。我很乐意接受psuedocode或vb.net。 :)
答案 0 :(得分:0)
此方法使用LINQ to DataSet来查询DataTable
,假设Option Infer On
,并且是代码和伪代码的混合!我不知道你用什么来构建Excel电子表格,所以我根据ClosedXML语法编写了这部分内容。它也是未经测试的,所以让我知道它是如何工作的 - 希望它足以指出你正确的方向,虽然可能有更优雅的解决方案!
' Build a list of the IDs
Dim ids = datatable.AsEnumberable() _
.Select(Function(dr) dr.Field(Of Integer)("ID")) _
.Distinct() _
.OrderBy(Function(x) x) _
.ToList()
' Headings
Dim row = 1, col = 1
worksheet.Cell(row, col).Value = "Date"
For Each id In ids
col += 1
worksheet.Cell(row, col).Value = CStr(id)
Next
' Data Values
For Each dr In datatable.Rows
row += 1
col = 1
worksheet.Cell(row, col).Value = dr.Field(Of Date)("Outage_Date")
col += 1
' Work out how many columns to shift the issue type over
Dim offset = ids.IndexOf(dr.Field(Of Integer)("ID"))
col += offset
worksheet.Cell(row, col).Value = dr.Field(Of String)("Issue_Type")
Next