2016-03-27 15 views
0

müssen Daten aus einer MDB-Datei auf dem Server extrahieren. Ich kann öffnen und auf die Daten zugreifen. Jetzt muss ich es einem Modell zuordnen und ich habe keine Idee, wie man die Daten als Modell erhält. Meine Idee war, durch die empfangenen DataTabel Daten Schleife und weisen Sie auf Werte des Modelltyp:OleDb/DataTable zu Modell

OleDbCommand command = new OleDbCommand(sqlcommand, DbConnection); 
adapter = new OleDbDataAdapter(command); 
builder = new OleDbCommandBuilder(adapter); 
dt = new DataTable(); 
try 
{ 
    DbConnection.Open(); 
    adapter.Fill(dt); 

    foreach (DataRow row in dt.Rows) 
    { 
     var examplemodel= new exampleModel(
     Id = row.ItemArray[0], 
     ... 
    ); 
    } 
} 
catch (Exception ex) 
{ 
} 
finally 
{ 
    DbConnection.Close(); 
} 

Das Problem hier ist, dass ich nicht row.ItemArray zuweisen [x] als ein Element des Modells seit Reihe .ItemArray [x] ist vom Typ Objekt und ich kann es nicht in eine int-Zeichenkette oder was auch immer konvertieren. Auch ich dachte, dass es vielleicht eine einfachere und sauberere Herangehensweise an dieses Problem gibt. Alle Ideen oder Vorschläge werden sehr geschätzt.

Antwort

1

Ich bevorzuge einfach Linq. Wie auch immer es sein mag, es ist sehr sauber und sicher, wenn wir die Spalte Namen anstelle von Index verwenden.

Sie könnten etwas wie tun.

dt.Rows.AsEnumerable() 
     .Select(r=> new exampleModel() 
       { 
        Id = r.Field<int>("col1"), 
        Name = r.Field<string>("col2"), 
        ... 
       }); 
+0

Hallo Hari, ich mag den Ansatz mit Linq und danke für deine Antwort. Ich habe etwas ähnliches versucht, aber AsEnumerable ist nur für eine ganze dataTable und nicht für eine ausgewählte Zeile definiert. Oder habe ich etwas verpasst? – wenzel

+0

'DataTable' hat keine' SelectedRows' Eigenschaft, meinst du einen Filter basierend auf einem _column_ Wert zu sagen? –

1

können Sie verwenden diese

var Entity=(from DataRow dataRow in data.Rows select YourEntity<exampleModel>(dataRow)).ToList(); 

Die Hilfsklasse

public static T YourEntity<T>(DataRow row) where T : new() 
      { 
       var entity = new T(); 
       var properties = typeof(T).GetProperties(); 

       foreach (var property in properties) 
       { 
        //Get the description attribute 
        var descriptionAttribute = (DescriptionAttribute)property.GetCustomAttributes(typeof(DescriptionAttribute), true).SingleOrDefault(); 
        if (descriptionAttribute == null) 
         continue; 

        property.SetValue(entity, row[descriptionAttribute.Description]); 
       } 

       return entity; 
      } 

und Dekorieren Sie den Entity mit der richtigen Datentabelle Header

public class exampleModel 
{ 
.... 
[Description("Subentity_datatable_header_header")] 
     public string Subentity { get; set; } 
.... 

}