2010-04-23 27 views
12

Si tengo una consulta que devuelve DateTime, ¿cuál es el valor de FirstOrDefault()? ¿Existe una forma genérica de obtener el valor predeterminado de un escalar C#? Ejemplo:¿Qué es FirstOrDefault para DateTime en Linq?

var list = (from item in db.Items 
    where item.ID==1234 
    select item.StartDate).FirstOrDefault(); 

Editar: Suponga que la columna StartDate no puede ser nulo.

Respuesta

35

La forma genérica para obtener un valor predeterminado para un tipo genérico que se da es:

default(T) 

donde T es el parámetro de tipo genérico en cuestión. Para los tipos de referencia, esto arrojará null. Para tipos de valor, esto producirá una instancia cero del valor. Para DateTime s, esto será equivalente a DateTime.MinValue.

+6

Como anotación al margen, siempre se puede "forzar" un defecto diferente utilizando:. 'Collection.DefaultIfEmpty (nueva DateTime (...)) En primer lugar();' –

2

Im adivinar su default(DateTime) el que im adivinar (de nuevo) es DateTime.MinValue

3

default(DateTime) es 1/1/0001 12:00:00 AM.

En su código, la mayor parte de su consulta es un IEnumerable de fechas de inicio de su base de datos. Su llamada a FirstOrDefault() devuelve el primer elemento del enumerable o el valor predeterminado de su tipo si no hay elementos en el enumerable.

Si el tipo de StartDate es realmente una fecha y no hay elementos en el enumerable, entonces el resultado será el valor de fecha y hora que proporcioné arriba.

1

Es medianoche, al principio 1-1-0001.

4

DateTime.MinValue

Cuestiones relacionadas