2012-05-08 7 views
6

Questo è come attualmente sto selezionando i dati dal database:Come selezionare i dati nell'elenco <T> anziché DataTable?

public DataTable GetData() 
{ 
    DataTable table = new DataTable("Table"); 
    using (SqlConnection connection = new SqlConnection("Connection string")) 
    { 
     SqlCommand command = new SqlCommand(); 
     command.Connection = connection; 
     command.CommandType = System.Data.CommandType.Text; 
     command.CommandText = "query string"; 

     connection.Open(); 
     SqlDataAdapter adapter = new SqlDataAdapter(command); 
     adapter.Fill(table); 
    } 
    return table; 
} 

Ma tornare DataTable e voglio selezionare Lista invece di DataTable. Come questo:

public List<MyClass> GetData() 
{ 
    DataTable table = new DataTable("Table"); 
    using (SqlConnection connection = new SqlConnection("Connection string")) 
    { 
     SqlCommand command = new SqlCommand(); 
     command.Connection = connection; 
     command.CommandType = System.Data.CommandType.Text; 
     command.CommandText = "query string"; 

     connection.Open(); 
     SqlDataAdapter adapter = new SqlDataAdapter(command); 
     adapter.Fill(table); 
    } 
    ... 
    return [List of MyClass]; 
} 

Come posso fare questo?

Grazie!

+2

Ti sicuramente voglia di utilizzare le chiamate ADO.NET di basso livello piuttosto che LINQ to SQL o Entity Framework? –

+0

Non ne sono sicuro. Ma penso che ADO.NET di basso livello sarà più veloce. – WaterDance

+0

Sì, ADO.NET sarà più veloce, ma questo guadagno di velocità fa la differenza per il tuo ambiente? –

risposta

3

mi consiglia di utilizzare dapper-dot-net, se non si vuole scavare in LINQ to SQL o Entity Framework. Fumare attorno a te con IDataReader per materializzare il risultato non vale la pena nella maggior parte dei casi.

+0

Grazie per il link. – WaterDance

1

Se si utilizza l'approccio ADO.NET - si torna a una tabella dati e si può convertirlo in un elenco o in IEnumberable.

In alternativa, si potrebbe guardare in strumenti ORM come NHibernate o utilizzare LINQ to SQL

3

Prova questo codice.

public List<MyClass> GetData() 
{ 
    DataTable table = new DataTable("Table"); 
    using (SqlConnection connection = new SqlConnection("Connection string")) 
    { 
     SqlCommand command = new SqlCommand(); 
     command.Connection = connection; 
     command.CommandType = System.Data.CommandType.Text; 
     command.CommandText = "query string"; 
     connection.Open(); 
     SqlDataAdapter adapter = new SqlDataAdapter(command); 
     adapter.Fill(table); 
     List<MyClass> list=new List<MyClass>(); 
     foreach(DataRow row in table) 
     { 
      MyClass instance = new MyClass(); 
      instance.ID = row["ID"]; 
      //similarly for rest of the properties 

      list.Add(instance); 
     } 

    } 

    return list; 
} 
+0

@WaterDance: per favore controlla la mia risposta aggiornata. – jams

+0

dapper-dot-net era un collegamento utile. Purtroppo non ho il privilegio di votare. – WaterDance

+0

-1. Non c'è letteralmente bisogno di scrivere più codice come questo. – tomfanning

4

Se si desidera utilizzare il DataRowCollection per compilare un elenco di oggetti personalizzati, è possibile utilizzare LINQ e un inizializzatore oggetto:

var lst = table.AsEnumerable().Select(r => 
    new MyObject 
    { 
     FirstProperty = r.Field<int>("FirstProperty"), 
     OtherProperty = r.Field<string>("OtherProperty") 
    }).ToList(); 
Problemi correlati