2012-04-03 19 views
8

que estoy tratando de hacer una consulta con LINQ en ASP.NET MVC 3.DateTime? .Value.TimeOfDay de consulta en LINQ

tengo un modelo, vamos a llamarlo Evento. Este objeto Evento tiene una propiedad Fecha, de DateTime ?. Lo que quiero es buscar los eventos que están entre 2 TimeSpans.

Ahora mismo mi código es el siguiente:

TimeSpan From = new TimeSpan(8,0,0); 
TimeSpan Until = new TimeSpan(22,0,0); 

var events = 
    from e in db.Events 
    where e.Date.Value.TimeOfDay >= From, 
      e.Date.Value.TimeOfDay <= Until 
    select e; 

se produce una excepción, que me decía que "El miembro de tipo especificado 'TimeOfDay' no es compatible con LINQ a Entidades".

No tengo una solución a este problema, y ​​he estado todo el día tratando. Por favor, ayúdame, estoy tan frustrado. :(

EDIT:..

me olvidó escribir aquí el "TimeOfDay" después e.Date.Value De todos modos, lo hice en mi código

no puedo usar DateTime porque tengo que filtrar los eventos que se producen entre cierta hora del día, a pesar de la fecha del evento.

+1

Su código de ejemplo ni siquiera usa 'TimeOfDay' - Supongo que en realidad lo hace, en lugar de usar' Date' (según su código)? –

+1

¿Por qué usa dos objetos TimeSpan en lugar de dos objetos DateTime para filtrar los eventos? – Steven

Respuesta

13

Utilice la Date and Time Canonical Functions for LINQ-to-Entities. Específicamente, mira

CreateTime(hour, minute, second) 

Si necesita ayuda llamando a una función canónica, mira How To: Call Canonical Functions.

+0

Esto parece estar en la pista, no sabía acerca de las funciones canónicas. ¡Gracias! Pero, ¿cómo puedo convertir DateTime a Time usando estos? – Umagon

+0

@Umagon: Use 'datetime.Hour',' datetime.Minute' y 'datetime.Second'. – jason

+1

¡Dios mío! ¡Esto resolvió mi problema! Creo que te amo, LOL. ¡Muchas gracias! : D – Umagon