fechas con Linq TO SQL

14/05/2010 - 20:11 por [Juanjo] | Informe spam
Hola grupo:

Tengo una tabla de una base de datos SQL SERVER que contiene un campo
DateTime, y cuando hago alguna consulta (obviamente) me devuelve un valor
para este campo dd/mm/aaaa h:mm:ss.

Yo solo quiero la fecha, Hay alguna forma de quitarle el componente hora
a la fecha?

Si tengo que representar la fecha en un campo datetimepicker, pues
todavia, pero si tienes que hacer un listado en un DatagridView queda fatal
que salga la hora.

Me da igual quitarle la hora al campo de la base de datos, en vez de
hacerlo por programacion (casi que mejor)

Muchas gracias
 

Leer las respuestas

#1 Alberto Poblacion
14/05/2010 - 20:46 | Informe spam
"[Juanjo]" wrote in message
news:
Tengo una tabla de una base de datos SQL SERVER que contiene un campo
DateTime, y cuando hago alguna consulta (obviamente) me devuelve un valor
para este campo dd/mm/aaaa h:mm:ss.

Yo solo quiero la fecha, Hay alguna forma de quitarle el componente
hora a la fecha?

Si tengo que representar la fecha en un campo datetimepicker, pues
todavia, pero si tienes que hacer un listado en un DatagridView queda
fatal que salga la hora.

Me da igual quitarle la hora al campo de la base de datos, en vez de
hacerlo por programacion (casi que mejor)



Creo que tienes un pequeño error de concepto. Si las fechas en el
servidor son de tipo DATETIME, no tienen formato ninguno, sino que guardan
los datos en binario. Si te las traes a memoria con LINQ, siguen sin tener
formato ninguno, ya que se convierten a objetos del tipo System.DateTime,
que siguen siendo binarios (es un struct que tiene dentro varios int con el
número del día, el número del mes, etc.). Por lo tanto, no puedes "quitarle
la hora al campo de la base de datos", salvo que le cambies el tipo y lo
pases a varchar en lugar de datetime (o lo pases a DATE si es un Sql Server
2008). Bueno, puedes poner la hora a cero, pero eso no resolverá tu problema
en el lado cliente, ya que te seguirá mostrando la hora, aunque sea
00:00:00.
¿Por qué?¿De donde salen esos hh:mm:ss, si hemos dicho que no tiene
formato? Pues los pone el proceso de conversión que sigues cuando pasas los
datos que te ha traído Linq a los objetos que tienes en pantalla. Aquí es
donde tienes que meter tú el formato. Si estás usando databinding y no
quieres manipular los formatos con los eventos del enlace, hay un truco muy
sencillo que puedes hacer, que consiste en meter la conversión en la
sentencia LINQ:

var q = from x in contexto.tabla
select new { x.campo1, etc etc,
Fecha=x.Fecha.ToString("dd/MM/aaaa") };
DataGridView1.DataSource = q.ToList();

Preguntas similares