2016-07-11 8 views
-3

ich versuche, eine linq-Abfrage zu schreiben, die Zeug in der Datenbank durchsucht. Wenn es die Daten erhält, sollte es die Ergebnisse in eine CSV-Datei zurückgeben. das ist meine AbfrageSchreiben Sie linq Abfrageergebnisse in .csv-Datei mvc

Ich bin schwer zu finden, wie ich diese Abfrage verwenden kann, um Ergebnisse in die Datenbank zu schreiben. im mit C# mvc

aktualisieren

Gerade jetzt ist dies meine Methode:

public FileContentResult ConnectToDatabase(Requests uc) 
    { 
     Context db = new Context(); 
     var query = (from a in db.Request 
        where a.Idnumber.Equals(uc.Idnumber) 
        select a); 

     string csv = string.Concat(from re in query 
            select string.Format("{0},{1},{2}\n", re.Idnumber, re.RequestStartDate, re.RequestEndDate)); 


     return File(new System.Text.UTF8Encoding().GetBytes(csv), "text/csv", "Report.csv"); 

    } 

und ich bin diesen Fehler: „LINQ to Entities erkennt nicht die Methode‚System. String-Format (System.String, System.Object, System.Object) "

+1

Sie fragen nach zwei separaten Schreibvorgänge ... zu einem CSV und zu einer Datenbank. Welches ist es? Darüber hinaus scheint die Abfrage in Ordnung zu sein. Was hat das mit Schreiben an einen CSV zu tun? Was hast du bisher versucht? –

+0

@DavidL überprüfen Sie bitte mein Update, ich möchte die Ergebnisse von meiner Abfrage in die CSV-Datei geschrieben werden –

Antwort

1

das Problem hier ist, dass query ist ein IQueryable, also wenn SietunEntity Framework wird versuchen, das in SQL zu konvertieren, und es wird nicht möglich sein.

So gibt es ein paar Möglichkeiten, wie Sie dieses Problem lösen können:

1) Halten Sie die IQueryable aber die CSV-Zeilen in einer Art und Weise aufzubauen, dass EF zu SQL übersetzen kann:

var csv = string.Concat(query.Select(re => re.IdNumber + "," + re.RequestStartDate + "," + re.RequestEndDate + "\n)); 

2) Materialise query in eine List, so dass der string.Format Aufruf erfolgt in C#, nicht SQL.

var query = (from a in db.Request 
        where a.Idnumber.Equals(uc.Idnumber) 
        select a).ToList(); 
+0

Vielen Dank @Pedro, ich verwendet .AsEnumerable() auf die Abfrage –