sólo tiene que utilizar la propiedad Date
:
var today = DateTime.Today;
var q = db.Games.Where(t => t.StartDate.Date >= today)
.OrderBy(t => t.StartDate);
en cuenta que yo he evaluado de forma explícita DateTime.Today
vez por lo que la consulta es consistente - de lo contrario cada vez que se ejecuta la consulta, e incluso dentro de la ejecución , Today
podría cambiar, por lo que obtendría resultados inconsistentes. Por ejemplo, supongamos que tiene los datos de:
Entry 1: March 8th, 8am
Entry 2: March 10th, 10pm
Entry 3: March 8th, 5am
Entry 4: March 9th, 8pm
Seguramente ya sea ambas entradas 1 y 3 deben estar en los resultados, o ni de ellos debería ... pero si se evalúa DateTime.Today
y TI cambios al 9 de marzo después de que se lleva a cabo las dos primeras comprobaciones, que podría terminar con las entradas 1, 2, 4.
por supuesto, el uso de DateTime.Today
asume usted está interesado en la fecha de la zona horaria local de . Eso puede no ser apropiado, y usted debe hacer absolutamente, seguro que sabe lo que quiere decir. Usted puede querer usar DateTime.UtcNow.Date
en su lugar, por ejemplo. Desafortunadamente, DateTime
is a slippery beast ...
EDITAR: Quizás desee deshacerse de las llamadas a DateTime
propiedades estáticas en general, hacen que el código sea difícil de probar. En Noda Time tenemos una interfaz específicamente para este propósito (IClock
) que esperamos que se inyecte de forma adecuada. Hay una implementación de "tiempo de sistema" para producción y una implementación de "stub" para pruebas, o puede implementarla usted mismo.
Puede usar la misma idea sin usar Noda Time, por supuesto. Para probar esta pieza de código en particular, es posible que desee pasar la fecha, pero la obtendrá de en algún lugar - e inyectando un reloj significa que puede probar todo el código.
+1. "puede necesitar usar Utc" es un buen punto. Además del valor de caché de "ahora", sería mejor pasarlo como argumento a una función para que pueda probarlo en una unidad (el código de prueba con DateTime.Today/DateTime.Now no es fácil). –
@AlexeiLevenkov: O inyecta un reloj, sí. Agregaré eso. –
El miembro del tipo especificado 'Fecha' no se admite en LINQ to Entities. Solo se admiten inicializadores, miembros de entidades y propiedades de navegación de entidades. – SAR