2008-08-28

CSV-Datei mit LINQ erstellen

Im folgenden Beispiel wird gezeigt, wie wir ein CSV-File mit LINQ erstellen können. Als Datenbank wird die SQL Server 2005 AdventureWorks-Datenbank verwendet.

Die Erstellung des CSV-Files erfolgt in drei Schritten:

Schritt 1: Die Daten aus der Datenbank ermitteln.

string conStr =
@"Data Source=IBM-E6A5BAE860C\SQL2K5;Initial Catalog=AdventureWorks;Integrated Security=True";

var db = new AdventureWorksDataContext(conStr);

IQueryable<ProductCategory> qry = from pc in db.ProductCategories
select pc;

Schritt 2: Die Felder für den Export in das CSV-File bestimmen.


int[] field1 = qry.Select(f => f.ProductCategoryID).ToArray();
string[] field2 = qry.Select(f => f.Name).ToArray();
Guid[] field3 = qry.Select(f => f.rowguid).ToArray();

In diesem Schritt werden die Werte der einzelnen Felder in einem Array-Objekt gespeichert. Der Select-Operator hilft uns dabei, die Wert zu ermitteln.


Schritt 3: Die Daten in das CSV-File schreiben.


TextWriter txtWrt = new StreamWriter(@"C:\ProductCategories.csv");

for (int i = 0; i < field1.Length; i++)
{
txtWrt.Write(field1[i] + ";");
txtWrt.Write(field2[i] + ";");
txtWrt.Write(field3[i].ToString());

txtWrt.WriteLine();
}

txtWrt.Close();

Den vollständigen Code findet ihr unten:


using System;
using System.IO;
using System.Linq;

namespace LinqCsvSamples0010
{
internal class Program
{
private static void Main(string[] args)
{
string conStr =
@"Data Source=IBM-E6A5BAE860C\SQL2K5;Initial Catalog=AdventureWorks;Integrated Security=True";

var db = new AdventureWorksDataContext(conStr);

IQueryable<ProductCategory> qry = from pc in db.ProductCategories
select pc;

int[] field1 = qry.Select(f => f.ProductCategoryID).ToArray();
string[] field2 = qry.Select(f => f.Name).ToArray();
Guid[] field3 = qry.Select(f => f.rowguid).ToArray();

TextWriter txtWrt = new StreamWriter(@"C:\ProductCategories.csv");

for (int i = 0; i < field1.Length; i++)
{
txtWrt.Write(field1[i] + ";");
txtWrt.Write(field2[i] + ";");
txtWrt.Write(field3[i].ToString());

txtWrt.WriteLine();
}

txtWrt.Close();

Console.ReadLine();
}
}
}

Ein ZIP-File für den Download findet ihr unter: LinqCsvSamples0010


Unter CodeProject findet ihr zu diesem Thema folgenden Artikel: LINQ to CSV library


Viel Spass...

No comments: