まず、私は .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