System.Data.EnumerableRowCollection(Of T)

lunedì 27 settembre 2010 - 10.46
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  Visual Studio 2008

volperubbia Profilo | Senior Member

Ciao a tutti,
sapete mica se esiste una modalità per ottenere
la seguente conversione:
- da System.Data.EnumerableRowCollection(Of T)
- a System.Collections.Generic.IList(Of T).

Grazie per l'attenzione,
Davide

freeteo Profilo | Guru

Ciao,
se non sbaglio EnumerableRowCollection implementa IEnumerable quindi devi costruirla così:
EnumerableRowCollection<T> coll = ... List<T> lista= new List<T>(coll as IEnumerable<T>);
come vedi praticamente ti basta castare la collection in IEnumerable dato che la implementa il cast è possibile.

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

volperubbia Profilo | Senior Member

Ciao Matteo ,
grazie ... ho così risolto:

Public Class [MyClass]
Public ID As String = String.Empty
' ALTRI CAMPI
' ...
End Class

Dim tbl As DataTable = Nothing
' ... CARICO LA TABELLA DA DB ...

Dim objRowC As System.Data.EnumerableRowCollection(Of [MyClass]) = Nothing
objRowC = From Row In tbl.AsEnumerable() Select New [MyClass] With {.ID = Row("ID").ToString}

Dim objList As System.Collections.Generic.List(Of [MyClass]) = Nothing
objList = New System.Collections.Generic.List(Of [MyClass])(objRowC)

L'unico pecca è che tocca sempre specificare l'elenco dei campi,
comunque funziona alla grande.

Davide

freeteo Profilo | Guru

Ciao,
ok, ma non ho capito bene il tuo codice, perchè hai bisogno di usare una datatable per poi andare a rigenerarti un oggetto? non puoi fare tutto direttamente mentre leggi dal db?

Io non uso DataTable da un bel po' (e spero di usarli ancora meno in futuro...) perchè lavoro sempre ad oggetti, ad esempio quando devo leggere dei dati dal database faccio codice di questo tipo:

List<Oggetto> lista = new List<Oggetto>(); using(SqlConnection cn = new SqlConnection(...)) { SqlCommand cmd = cn.CreateCommand(); cmd.CommandText = "SELECT ... FROM ..."; SqlDataReader rd = cmd.ExecuteReader(); while(rd.Read()) lista.Add(BuildObject(rd)); } return lista;
dove BuildObject genera l'oggetto di quella classe, dai valori del db:
Oggetto BuildObject (SqlDataReader rd) { Oggetto o = new Oggetto(); o.Nome = Convert.ToString(rd["nome"]); o.ID = Convert.ToInt32(rd["id"]); ... return o; }

il codice è C# ma è facilmente traducibile in vb.net...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

volperubbia Profilo | Senior Member

Ciao Matteo,
hai ragione ... anche io alla fine userò un data reader, è una cosa solo
temporanea, in questi giorni ho un po' di fretta e volevo verificare anche
quell'altra strada.

Davide
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5