2017-01-09 5 views
-1

Ich habe ein Modell, das ich aus einer ziemlich komplexen Abfrage bevölkere. Das Modell sieht so aus:C# MVC Modell in String Array konvertieren

List<CSVExportViewModel> data = GetData(dataset); 

foreach (CSVExportViewModel item in data) 
{ 
    writer.WriteLine("'" + string.Join("','", item) + "'"); 
} 

Anstatt jedoch das Modell in einer Reihe Umwandlung und Ausgabe der einzelnen Positionen:

public class CSVExportViewModel 
{ 
    public long Id { get; set; } 

    public string StudentNo { get; set; } 
    public string StudentIdNumber { get; set; } 
    public string StudentName { get; set; } 
    public string Parent1IdNumber { get; set; } 
    public string Parent1Name { get; set; } 
    public string Parent2IdNumber { get; set; } 
    public string Parent2Name { get; set; } 
    /* etc... */ 
} 

ich jetzt das Modell zur Ausgabe in eine CSV-Datei mit dem folgenden Code benötigen des Modells wird nur "Models.CSVExportViewModel" für jede Zeile der resultierenden CSV-Datei ausgegeben.

Wie kann ich das Modell in ein String-Array konvertieren, damit das funktioniert?

+0

Ich weiß nicht, was 'CSVExportViewModel' ist, aber es ist definitiv keine Zeichenfolge. Also druckt der C# -Compiler 'classname'. – Prajwal

+0

Sie sagen es, um das 'CSVExportViewModel' zu schreiben, um richtig zu stringeln? Aber ich wette, Sie haben keine 'ToString'-Methode in dieser Klasse geschrieben, also weiß sie nicht, wie sie diese in eine Zeichenkette ausgeben soll. Sie erhalten also nur den Klassennamen – ediblecode

+0

Sie müssen jede Eigenschaft von 'CSVExportViewModel' ausgeben –

Antwort

0

Dank alle. @MathewJibin wies mich in die richtige Richtung. Ich implementierte ToArray() in meinem Modell wie folgt:

public class CSVExportViewModel 
{ 
    public long Id { get; set; } 
    public string StudentNo { get; set; } 
    public string StudentIdNumber { get; set; } 
    public string StudentName { get; set; } 
    public string Parent1IdNumber { get; set; } 
    public string Parent1Name { get; set; } 
    public string Parent2IdNumber { get; set; } 
    public string Parent2Name { get; set; } 
    /* etc... */ 
    public String[] ToArray() 
    { 
     List<string> arr = new List<string>(); 

     foreach (var prop in typeof(CSVExportViewModel).GetProperties()) 
     { 
      string value = ""; 
      if (prop.GetValue(this, null) != null) 
      { 
       value = prop.GetValue(this, null).ToString(); 
      } 

      arr.Add(value); 
     } 

     return arr.ToArray(); 
    } 
} 

Dann musste nur den Code modifizieren item.ToArray zu nennen();

Vielen Dank für die Hilfe!

0

ToString() in CSVExportViewModel Klasse implementieren:

public override string ToString() 
{ 
    return Id + ", " + StudentNo + ", " + StudentIdNumber + ", " + StudentName + ", " + 
    Parent1IdNumber + ", " + Parent1Name + ", " + Parent2IdNumber + ", " + Parent2Name; 
} 
0

Sie einen Array auf Fly erstellen

foreach (CSVExportViewModel item in data) 
{ 
    writer.WriteLine(string.Join(",", new object[] {item.prop1, item.prop2, item.prop3 ...})); 
}