Pasar como parametro un var de Linq

11/12/2008 - 15:39 por Paul | Informe spam
Hola,

En el load de un formulario hago por ejemplo:
var clienteVehiculo;= from cli in dc.clientes
join coche in dc.vehiculos
on cli.id==coche.idCli
select new
{
idCliente=cli.id,
idVehiculo=coche.id,
nombreVliente=cli.nombre,
matricula=coche.matricula
};

Y esto quiero que sea visible para varios metodos del formulario.
Como puedo pasar clienteVehiculo como parametro a otras funciones?
En estas funciones se podra hacer paramClienteVehiculo.nombre?

Gracias

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
11/12/2008 - 15:48 | Informe spam
"Paul" wrote in message
news:
Mostrar la cita
No, no se puede. Es una limitación de C# 3.0: Los var no se reconocen
fuera del ámbito que los declara e inicializa. En C# 4.0 (que aún es
preliminar y la especificación no es definitiva) probablemente estarán
disponibles los tipos "dynamic" que sí que permitirán hacer estas cosas,
pero en el 3.0 no se puede. Tendrías que usar en el select un tipo concreto
en lugar de un tipo anónimo, y asignar los resultados de la consulta a una
lista de ese tipo concreto. Entonces sí que podrías devolver la lista fuera
del método.
#2 Paul
12/12/2008 - 10:18 | Informe spam
On 11 dic, 15:48, "Alberto Poblacion" <earthling-
wrote:
Mostrar la cita
Hola,
No entiendo muy bien lo que dices, me podrias poner un ejemplo?

Gracias
#3 Alberto Poblacion
12/12/2008 - 12:28 | Informe spam
"Paul" wrote in message
news:
Mostrar la cita
Lo de que "estás devolviendo un tipo anónimo" se refiere a que estás
haciendo "select new {...};". Esto genera internamente una Clase privada con
un nombre aleatorio decidido por el compilador, que no es accesible por tí
de forma explícita en ningún sitio. Por eso los elementos generados los
tienes que asignar a un "var", que recibe el tipo de Clase correspondiente
directamente desde el compilador. Y por eso no se puede devolver el "var" a
fuera del método, ya que la Clase representada por ese "var" no existe en
ningún otro sitio.

El remedio es crear tú mismo la Clase, para que sea conocida:

Class MisDatos
{
public int idCliente {get;set;}
public int idVehiculo {get;set;}
public string nombreVliente {get;set;}
public string matricula {get;set;}
}

Y ahora cambias el select de forma que haga un "new" de esta clase:

... select new MisDatos { idCliente=cli.id, etc.etc };

Con el resultado haces un .ToList() y se lo asignas a un List<MisDatos> en
lugar de un var. Y ahora, ese List<MisDatos> sí que lo puedes devolver fuera
del procedimiento, a cualquier sitio que tenga visibilidad del Class
MisDatos (lo puedes marcar como public o internal según convenga).
#4 Paul
12/12/2008 - 13:51 | Informe spam
On 12 dic, 12:28, "Alberto Poblacion" <earthling-
wrote:
Mostrar la cita
Perfecto, muchas gracias
#5 Julian
17/12/2008 - 14:49 | Informe spam
Yo defino dentro de la clase del formulario y fuera do cualquier metodo
private IQueryable<veiculos> clienteVehiculo;

y luego dentro del Evento Load del Form
clienteVehiculo = from cli in dc.clientes join coche in dc.vehiculos on
cli.id == coche.edCli delect etc.

luego dispondrás de la colecion clienteVehiculo en cualquier Metodo.
Lo que no te garantizo que funcione es "select new {etc, etc, etc}
al menos eso me pasa con BindingList en lugar de IQueryable.

"Paul" escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida