consulta sobre LinqtoSQL

06/11/2008 - 19:37 por [Juanjo] | Informe spam
Hola grupo:

Supongamos la siguiente:
1. Tengo una clase que se encarga de realizar consulta sobre una base de
datos SQL Server, y tengo una consulta dinamica con LinqToSql en un funcion,
algo asi p.e.
(en ClassBD.cs)
public object[] getPersonas()
{
string sql="select clave,nombre from personas";
miLinqDataContext linq = new miLinqDataContext();
var datos = linq.ExecuteQuery<object>(sql);
return datos.ToArray<object>();
}
//Teniendo en cuenta que la tabla personas tiene mas campos, pero solo
me interesan por ejemplo esos 2

2. En un formalario quiero mostrar en un datagridview la lista de estas
personas
public void cargaPersonas()
{
ClassBD bd = new ClassBD()
this.datagridview1.DataSource=bd.getPersonas();
}

¿Por que no se muestra nada en el DataGrid si al hacer una traza si hay
elementos?

He leido en el google que si "Si la tabla no existe dentro del modelo,
.NET no encontrará forma de asociar la tabla a la entidad del modelo y no se
podrá acceder de forma directa.", pero hay alguna forma de hacer alguna
conversion??

Se me ha ocurrido crear un vista, pero claro no es cuestion de estar
creando vista para cada consulta.

Gracias

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
07/11/2008 - 14:15 | Informe spam
JJ,

El tipo (estático) de los elementos del array es object, y object no tiene
propiedades públicas... Por eso debe ser q no sale nada. Tendrías que mover
esos datos a un array o colección de otro tipo.

Al final, creo q hay q terminar definiendo un tipo

class Tmp
{
public int Clave { get; set; }
public string Nombre { get; set; }
}

y usarlo en las llamadas:

var datos = linq.ExecuteQuery<Tmp>(sql);
return datos.ToArray<Tmp>();

Entonces el enlace a datos te funcionará perfectamente.

Slds - Octavio



"[Juanjo]" wrote in message
news:%
Hola grupo:

Supongamos la siguiente:
1. Tengo una clase que se encarga de realizar consulta sobre una base
de datos SQL Server, y tengo una consulta dinamica con LinqToSql en un
funcion, algo asi p.e.
(en ClassBD.cs)
public object[] getPersonas()
{
string sql="select clave,nombre from personas";
miLinqDataContext linq = new miLinqDataContext();
var datos = linq.ExecuteQuery<object>(sql);
return datos.ToArray<object>();
}
//Teniendo en cuenta que la tabla personas tiene mas campos, pero solo
me interesan por ejemplo esos 2

2. En un formalario quiero mostrar en un datagridview la lista de estas
personas
public void cargaPersonas()
{
ClassBD bd = new ClassBD()
this.datagridview1.DataSource=bd.getPersonas();
}

¿Por que no se muestra nada en el DataGrid si al hacer una traza si hay
elementos?

He leido en el google que si "Si la tabla no existe dentro del modelo,
.NET no encontrará forma de asociar la tabla a la entidad del modelo y no
se podrá acceder de forma directa.", pero hay alguna forma de hacer alguna
conversion??

Se me ha ocurrido crear un vista, pero claro no es cuestion de estar
creando vista para cada consulta.

Gracias
Respuesta Responder a este mensaje
#2 [Juanjo]
07/11/2008 - 16:09 | Informe spam
Gracias Octavio,

Entonces para cada consulta cuyo resultado no sea la estructura de una
tabla (por ejemplo, menos campos, o un inner join), hay que crear una clase
temporal?

gracias

"Octavio Hernandez" escribió en el mensaje
de noticias:
JJ,

El tipo (estático) de los elementos del array es object, y object no tiene
propiedades públicas... Por eso debe ser q no sale nada. Tendrías que
mover esos datos a un array o colección de otro tipo.

Al final, creo q hay q terminar definiendo un tipo

class Tmp
{
public int Clave { get; set; }
public string Nombre { get; set; }
}

y usarlo en las llamadas:

var datos = linq.ExecuteQuery<Tmp>(sql);
return datos.ToArray<Tmp>();

Entonces el enlace a datos te funcionará perfectamente.

Slds - Octavio



"[Juanjo]" wrote in message
news:%
Hola grupo:

Supongamos la siguiente:
1. Tengo una clase que se encarga de realizar consulta sobre una base
de datos SQL Server, y tengo una consulta dinamica con LinqToSql en un
funcion, algo asi p.e.
(en ClassBD.cs)
public object[] getPersonas()
{
string sql="select clave,nombre from personas";
miLinqDataContext linq = new miLinqDataContext();
var datos = linq.ExecuteQuery<object>(sql);
return datos.ToArray<object>();
}
//Teniendo en cuenta que la tabla personas tiene mas campos, pero solo
me interesan por ejemplo esos 2

2. En un formalario quiero mostrar en un datagridview la lista de
estas personas
public void cargaPersonas()
{
ClassBD bd = new ClassBD()
this.datagridview1.DataSource=bd.getPersonas();
}

¿Por que no se muestra nada en el DataGrid si al hacer una traza si
hay elementos?

He leido en el google que si "Si la tabla no existe dentro del modelo,
.NET no encontrará forma de asociar la tabla a la entidad del modelo y no
se podrá acceder de forma directa.", pero hay alguna forma de hacer
alguna conversion??

Se me ha ocurrido crear un vista, pero claro no es cuestion de estar
creando vista para cada consulta.

Gracias



Respuesta Responder a este mensaje
#3 Alfredo Novoa
07/11/2008 - 17:10 | Informe spam
Hola Juanjo,

El Fri, 7 Nov 2008 16:09:40 +0100, [Juanjo] escribió:

Entonces para cada consulta cuyo resultado no sea la estructura de una
tabla (por ejemplo, menos campos, o un inner join), hay que crear una clase
temporal?



No hay clases temporales. En esos casos tienes que crear clases :-(

Este es uno de los grandes fallos de LINQ.


Saludos
Respuesta Responder a este mensaje
#4 [Juanjo]
07/11/2008 - 17:24 | Informe spam
vale, muchas gracias :'(((((

"Alfredo Novoa" escribió en el mensaje de
noticias:

Hola Juanjo,

El Fri, 7 Nov 2008 16:09:40 +0100, [Juanjo] escribió:

Entonces para cada consulta cuyo resultado no sea la estructura de una
tabla (por ejemplo, menos campos, o un inner join), hay que crear una
clase
temporal?



No hay clases temporales. En esos casos tienes que crear clases :-(

Este es uno de los grandes fallos de LINQ.


Saludos
Respuesta Responder a este mensaje
#5 Octavio Hernandez
07/11/2008 - 17:55 | Informe spam
JJ,

Yo casi que te diría que sí :-(.
He estado intentando hacer un "apaño" aquí, creo que se podría lograr, pero
estoy corto de tiempo y al final es más o menos lo mismo. Tener un método al
que le pases una instancia del tipo que quieres obtener para que sirva de
"ejemplar" para convertir los elementos de tu array de object. La idea
básica sale de aquí:

http://kirillosenkov.blogspot.com/2...ymous.html

Pero si al final vas a tener que escribir

new { Clave = 0, Nombre = "" }

para lograr el truco, al final sería más o menos lo mismo que definir la
clase

class Tmp {
// Clave, Nombre
}

y menos claro...

Igual alguien ha encontrado algo mejor por ahí, pero no lo he visto.

Slds - Octavio



"[Juanjo]" wrote in message
news:
Gracias Octavio,

Entonces para cada consulta cuyo resultado no sea la estructura de una
tabla (por ejemplo, menos campos, o un inner join), hay que crear una
clase temporal?

gracias

"Octavio Hernandez" escribió en el mensaje
de noticias:
JJ,

El tipo (estático) de los elementos del array es object, y object no
tiene propiedades públicas... Por eso debe ser q no sale nada. Tendrías
que mover esos datos a un array o colección de otro tipo.

Al final, creo q hay q terminar definiendo un tipo

class Tmp
{
public int Clave { get; set; }
public string Nombre { get; set; }
}

y usarlo en las llamadas:

var datos = linq.ExecuteQuery<Tmp>(sql);
return datos.ToArray<Tmp>();

Entonces el enlace a datos te funcionará perfectamente.

Slds - Octavio



"[Juanjo]" wrote in message
news:%
Hola grupo:

Supongamos la siguiente:
1. Tengo una clase que se encarga de realizar consulta sobre una base
de datos SQL Server, y tengo una consulta dinamica con LinqToSql en un
funcion, algo asi p.e.
(en ClassBD.cs)
public object[] getPersonas()
{
string sql="select clave,nombre from personas";
miLinqDataContext linq = new miLinqDataContext();
var datos = linq.ExecuteQuery<object>(sql);
return datos.ToArray<object>();
}
//Teniendo en cuenta que la tabla personas tiene mas campos, pero
solo me interesan por ejemplo esos 2

2. En un formalario quiero mostrar en un datagridview la lista de
estas personas
public void cargaPersonas()
{
ClassBD bd = new ClassBD()
this.datagridview1.DataSource=bd.getPersonas();
}

¿Por que no se muestra nada en el DataGrid si al hacer una traza si
hay elementos?

He leido en el google que si "Si la tabla no existe dentro del
modelo, .NET no encontrará forma de asociar la tabla a la entidad del
modelo y no se podrá acceder de forma directa.", pero hay alguna forma
de hacer alguna conversion??

Se me ha ocurrido crear un vista, pero claro no es cuestion de estar
creando vista para cada consulta.

Gracias



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida