Datatable tipada y Linq

17/09/2007 - 15:21 por Beto | Informe spam
Yo quisiera hacer una clase nombrada RegistroVariable que mandandole a su
constructor un nombre de tabla y una clave primaria INT (identity) de una
tabla de mi base de datos me retorne un objeto (que podria ser un datatable
tipado) que me incluya en sus propiedades los nombres de los campos de esa
tabla y en sus valores los valores de dichos campos.

Ejemplo:

RegistroVariable Reg=New RegistroVariable("Tabla1",14567); /*1457 es la
clave primaria de la tabla Tabla1*/

Ejemplo: La estructura de Tabla1 es PK (int), TrFec (datetime), TrNo (int),
TrDet (char(40)

Yo quiero que me retorne en Reg esos mismos campos de manera que pueda
acceder a ellos
de la forma Reg.PK, Reg.TrFec, Reg.TrNo, Reg. TrDet.


Ok yo podria definir el tipo RegistroVariable con esa estructura de fields
pero el punto es que quiero usar la misma clase RegistroVariable para
diferentes tablas que tienen diferentes estructuras, lo unico comun es la PK
que es INT pero son muchas tablas con distintos nombres de campos y tipos en
sql server.. No se si me explicado bien.

Si se puede, como puedo generalizarlo para una sola clase?


Por cierto alguien me dijo que con Linq en la proxima version eso se hace
mas sencillo ? Es cierto? me podrian decir como ?

Conocen algun foro de Linq?

muchas grcs.
beto
 

Leer las respuestas

#1 Alberto Poblacion
17/09/2007 - 22:45 | Informe spam
"Beto" wrote in message
news:ungXa2S%
Yo quisiera hacer una clase nombrada RegistroVariable que mandandole a su
constructor un nombre de tabla y una clave primaria INT (identity) de una
tabla de mi base de datos me retorne un objeto (que podria ser un
datatable tipado) que me incluya en sus propiedades los nombres de los
campos de esa tabla y en sus valores los valores de dichos campos.

Ejemplo:

RegistroVariable Reg=New RegistroVariable("Tabla1",14567); /*1457 es la
clave primaria de la tabla Tabla1*/

Ejemplo: La estructura de Tabla1 es PK (int), TrFec (datetime), TrNo
(int), TrDet (char(40)

Yo quiero que me retorne en Reg esos mismos campos de manera que pueda
acceder a ellos
de la forma Reg.PK, Reg.TrFec, Reg.TrNo, Reg. TrDet.



Es problemático. Para que puedas hacer Reg.LoQueSea, el compilador tiene
que conocer ese "LoQueSea", pero si se define en tiempo de ejecución en
función del string "Tabla1", no se conoce en tiempo de compilación.

Lo más parecido sería Reg("PK"), Reg("TrFec"), etc., pero esto sería
simplemente un DataRow de un DataTable no tipado, el cuál podrías llenar de
forma bastante simple con un Fill de un DataAdapter.


Por cierto alguien me dijo que con Linq en la proxima version eso se hace
mas sencillo ? Es cierto? me podrian decir como ?



No es solo Linq, sino también el C# versión 3. En esta versión puedes
declarar tu variable Reg como var Reg=Expresion;, y luego usar Reg.LoQueSea,
pero para eso todos los campos tienen que ser conocidos dentro de Expresion,
no puede ser un string que se resuelva sobre la marcha. Pero lo que sí
tienes es que Visual Studio 2008 the permite definir de forma gráfica un
origen de datos que abarque todas las tablas que quieras de la base de
datos, y luego puedes hacer Select en tu código desde el origen de datos, y
te reconoce las columnas como quieres (pero la tabla la tienes que poner
fija, no puede ser un string).

Preguntas similares