2016-03-24 6 views
1

ersetzen Lassen Sie mich vortragen, dass ich diese Frage gesucht und eine Menge Dinge ausprobiert habe, aber ich vermisse offensichtlich etwas einfaches (denke ich).versuchen, einen Feldnamen mit einer Variablen zur Laufzeit in EF

Ich glaube, dass meine Lösung Reflexion beinhaltet, aber ich kann es einfach nicht richtig machen.

Bearbeiten: Schnellere Frage - Ich muss den .fieldname eines Abfrageergebnisses durch eine Zeichenfolge ersetzen. So var value = stops.First().con_name; muss die .con_name zur Laufzeit dynamisch sein.

Grundlagen: Ich erstelle die Fähigkeit, benutzerdefinierte Berichte aus einer Datenbank zu generieren, wo das Berichtslayout in einer Tabelle mit Spaltennamen, Spaltenposition und Feldnamen gespeichert ist.

So unter dem die Daten für einen sehr einfachen Bericht:

record 1 
col_index - 17 
field_name - con_name 

record 2 
col_index - 18 
field_name- con_city 

Ich brauche den eine Tabelle stop_details für eine Sammlung von Aufzeichnungen genannt abzufragen, die in den Bericht aufgenommen werden sollen.

Ich möchte dann eine Tabelle mit dem Namen report_matrix abfragen, die die obigen Datensätze (die beiden Beispielsätze, die ich gab) zurückgeben.

Ich muss dann die Matrix-Ergebnisse durchlaufen und die Spalten basierend auf den Daten erstellen.

Die Herausforderung ersetzt den field_name zur Laufzeit. So im folgenden Code auf dem ersten Lauf durch var value = stops.First().con_name; das zweite Mal haben würde .con_name mit .con_city ersetzt werden würde etc ....

Hier ist mein Code:

 //get collection of stops for export 

     var stops = (from s in db.stop_details 
        where s.eCourier_export_flag == true 
        select s) 
        .ToArray(); 

     //pull in all the report format details 

     var reportLayout = (from r in db.report_matrix 
          where r.report_id == 1 
          select r) 
          .ToArray(); 

     //just do one line 

     foreach (var layoutElement in reportLayout) 
     {     
      // Select the PropertyInfo of the column. 
      PropertyInfo propertyInfo = 
       stops.First().GetType().GetProperty(layoutElement.field_name); 
      // name = stops.GetValue(propertyInfo, null).ToString(); 
      // HERE is where I need to replace .con_name with the field name from the query 
      var value = stops.First().con_name; 
     } 

Vielen Dank im Voraus für jede Hilfe .... Joe

+1

Danke Alexander ... Ich verstehe, was du jetzt Formatierungs weise meinst. Daran werde ich in Zukunft arbeiten und die Hilfe zu schätzen wissen. –

Antwort

1

Sie benötigen die GetValue Methode von PropertyInfo verwenden:

PropertyInfo propertyInfo = 
      stops.First().GetType().GetProperty(layoutElement.field_name); 
var value = propertyInfo.GetValue(stops.First()); 
Verwandte Themen