2012-03-27 6 views
0

Wie würde ich Ergebnisse aus Datasets in einer Liste speichern?Speichern von Dataset-Ergebnissen in IList

Model read = new Model() 
IList<sqlprop> sqlprop= read.readrows("SELECT * FROM test").Tables[0].Cast<DataRow>().ToList(); 

Class Model 
{ 
public DataSet readrows(string query) 
     { 
      ............ 
      return dataset; 
     } 
} 

Class sqlprop 
{ 
string data1 get;set; 
string data2 get;set; 
......... 
} 
+0

Meinst du "wie' DataRow' in 'sqlprop' konvertieren?"? –

+1

Es ist nicht klar, was Sie meinen, und Ihr Codebeispiel hat viele Probleme, die die Absicht der Probe verdecken. – David

+0

Ja konvertiere den Datarow in sqlprop. – tdjfdjdj

Antwort

5

So etwas wie dies tun würde, was Sie wollen, ich denke ...

List<sqlprop> sqlprop= read 
    .readrows("SELECT * FROM test") 
    .Tables[0] 
    .Rows 
    .Cast<DataRow>() 
    .Select(r => new sqlprop 
        { 
         data1 = r.GetString(0), 
         data2 = r.GetString(1) 
        }) 
    .ToList(); 

Sie für DBNull.Value überprüfen sollten, und wahrscheinlich auch die Spaltennamen in der SQL-Abfrage etc, etc, aber Sie bekomme eine Vorstellung.

aktualisieren

Wenn Sie es benötigen generisch zu sein und die Spaltennamen in der Datenbank entspricht genau den Namen der Eigenschaft Sie so etwas tun könnte (nicht getestet, habe ich keinen Compiler hier, aber es sollte Ihnen die Idee):

List<sqlprop> sqlprop= read 
    .readrows("SELECT * FROM test") 
    .Tables[0] 
    .Rows 
    .Cast<DataRow>() 
    .Select(r => { 
     var ret = new sqlprop(); 
     foreach (var p in ret.GetType().GetProperties()) 
     { 
      object val = r[r.Table.Columns.IndexOf(p.Name)]; 
      if (val != DBNull.Value) 
      { 
       p.SetValue(ret, val, null); 
      } 
     } 
     return ret; 
    }) 
    .ToList(); 

HINWEIS: Dies ist ein bisschen flockig und nicht super effizient, aber trotzdem, da ist es!

+0

Toll, aber gibt es das überhaupt, um das dynamischer zu machen? Ich habe Hunderte von SQL-Abfragen, so dass ich nicht manuell schreiben möchte .... GetString (xxx) usw. Gibt es eine Möglichkeit, die übereinstimmenden Spalten/Variablen automatisch ausfüllen zu lassen? – tdjfdjdj

+0

@ user719825 das klingt, als ob du keine Datasets verwenden willst, dann –

+0

Ja, ich stimme zu, dass es wahrscheinlich einen besseren Ansatz gibt, als dies mit Datasets zu tun, aber da gehst du trotzdem, viel Spaß! – kmp