2017-02-12 4 views
0

Ich benutze CsvHelper lib zum Lesen der CSV-Datei und ich kann die Datei mit der lib erfolgreich lesen. Allerdings kann ich SQL-Bedingung nicht verwenden, um Werte zu filtern. Wie kann ich das tun, ohne SQL Server zu verwenden? Ich bin wirklich fest darauf.C# CSV-Datei mit SQL-Bedingungen lesen

Es war sehr einfach, mit Pandas und Pandasql Libs in Python, aber es ist zu hart in C# zu sein ..

Mein Code:

public static void Main(string[] args) 
     { 
      var fileInfo = new FileInfo(@"filePath"); 

      using (TextReader reader = fileInfo.OpenText()) 
      using (var csvReader = new CsvReader(reader)) 
      { 
       csvReader.Configuration.Delimiter = ","; 
       csvReader.Configuration.HasHeaderRecord = false; 
       csvReader.Configuration.IgnoreQuotes = true; 
       csvReader.Configuration.TrimFields = true; 
       csvReader.Configuration.WillThrowOnMissingField = false; 


       while (csvReader.Read()) 
       { 
        var myStrinVar = csvReader.GetField<string>(0); 

        Console.Write(myStrinVar); //SELECT * FROM table... 
       } 
      } 
     } 
+0

Was ist der Filter, den Sie anwenden möchten? –

+0

Wählen Sie zum Beispiel * aus der Tabelle where column_name = "abc"; alle Filter geschätzt – nuhkoca

+0

Sie scheinen zu vergessen, die Daten zu jeder Art von Speicher hinzuzufügen, sei es ein Array, eine Liste , eine Datenbank oder irgendetwas anderes. Vielleicht wäre Ihre Frage besser mit einem * kleinen * Beispiel der Python-Version, um zu zeigen, was Sie eigentlich tun möchten. Möchten Sie die gesamte CSV-Datei lesen und dann filtern oder die Daten filtern, bevor Sie sie speichern? –

Antwort

4

Ich würde vorschlagen, mit LINQ zu filtern deine Ergebnisse.

https://msdn.microsoft.com/en-us/library/bb397906.aspx

Sagen Sie etwas Klasse haben MyClass, dass Sie die Zeilen in Ihrer Datei in serialisieren kann. Zum Beispiel:

public class MyClass 
{ 
    public int ID { get; set; } 
} 

var records = csv.GetRecords<MyClass>().ToList(); 
var filtered = records.Where(r => r.ID >= 10); 

Dieses Beispiel ist ein wenig gekünstelt, aber sie alle Booleschen Ausdruck verwenden, können Sie in der where-Klausel mögen.