首先,如果我对这个有点不理解,请原谅,因为我对 .net、匿名类型和 LINQ 有点陌生。坦率地说,我有点挣扎,并计划在下个月就该主题进行大量学习。我知道的足够多,知道我想出的方法不是正确的。
我得到了一个项目来创建各种分隔输出格式,这些格式源自已经存在了一段时间的标准报告提要。为此已经有一个框架,我只是添加更多格式和一些新的输出机制。(下面的一些细节可能无关紧要,但为了清楚起见,我将包括在内。)
来自数据层的查询返回一个 LLBLGEN TypedList。然后应用 LINQ 查询来创建各种提要输出格式,从而生成 IEnumerable 匿名对象。作为我项目的一部分,我将获取该对象并将其输出为逗号分隔的文件。
通过查看下面的示例和其他一些示例,我已经能够将一个工作功能组合在一起,但我确信这绝不是完成任务的正确方法(使用反射等)。也就是说,“正确的方式”让我望而却步!即使是指向正确方向的指针也会很有帮助。
Private Sub SendExport(feed As IEnumerable, filename As String)
Dim delimited As New StringBuilder
Dim type = feed(0).GetType
Dim props = type.GetProperties
delimited.AppendLine(String.Join(",", props.Select(Function(p) p.Name).ToList))
For Each item In feed
Dim itemType = item.GetType
Dim typeProps = itemType.GetProperties
delimited.AppendLine(String.Join(",", typeProps.Select(Function(p) p.GetValue(item)).ToList))
Next
Debug.WriteLine(delimited.ToString)
Response.Clear()
Response.AddHeader("Cache-Control", "must-revalidate")
Response.AddHeader("Pragma", "must-revalidate")
Response.AddHeader("Content-type", "application/vnd.ms-excel")
Response.AddHeader("Content-disposition", String.Format("attachment; filename={0}.csv", filename))
Response.Write(delimited.ToString)
Response.End()
End Sub