2008-10-04 24 views
11

Cuando recupero un registro usando LINQ que tiene un campo DateTime, solo ToString() está disponible.DateTime, DateTime? y LINQ

¿Dónde están todos los demás métodos de DateTime?

Tengo que convertir.ToDateTime el DateTime? que el campo vuelve?

¿Cuál es la diferencia entre (DateTime) y (DateTime?)

Respuesta

16

Si por DateTime? quiere decir un Nullable<DateTime>, entonces se puede obtener el valor de la propiedad a través de DateTimeDateTime?.Value.

+0

... o lanzando el DateTime? en un DateTime. En cualquier caso, debe verificar si es nulo primero o si recibirá una excepción. – Lucas

+0

Gracias! Sé que fue hace casi un año, pero tu respuesta me impidió publicar una nueva pregunta. –

0

La colisión de espacio de nombres a un lado, sé que la fecha y hora de SQL tiene una época diferente (y por lo tanto un rango diferente de fechas válidas) que C# de fecha y hora.

Intente enviar un new DateTime() a un procedimiento almacenado y vea lo que quiero decir.

9

En SQL, DateTimes puede ser nulo. En C# DateTimes no puede ser nulo. Puede leer un poco acerca de nullable value types. Dado que las variables de tipo de valor no pueden ser nulas, se creó una clase genérica para manejar esta situación. Se llama Nullable <> y se escribe comúnmente con un signo de interrogación después del tipo.

Para utilizar estos valores, deberá verificar la propiedad .HasValue. Es un booleano que sabe si hay un valor en el objeto o si es nulo. Una vez que haya verificado que la propiedad .HasValue es verdadera, puede usar la propiedad .Value de forma segura. La propiedad .Value será del tipo DateTime.

+0

El HasValue fue bastante útil para mí al trabajar con la comprobación de valores enteros posiblemente NULL en una consulta LINQ como sigue: c.Field (Of Integer?) ("SecondaryID"). HasValue – atconway

2

En SQL, tiene el campo DateTime configurado en Permitir nulo. Luego, en LINQ, cuando va a acceder al campo, .NET no sabe si el campo es realmente una fecha o no, razón por la cual tiene que Convertir.ToDateTime() antes de que los métodos de fecha estén disponibles para usted.

Si el campo siempre contendrá una fecha, configure la columna de la base de datos en NOT NULL y debería estar bien.