2012-04-03 14 views
8

Próbuję wykonać kwerendy z LINQ na ASP.NET MVC 3.Korzystanie DateTime? .Value.TimeOfDay w LINQ kwerendy

Mam modelu, pozwala wywołać zdarzenia. Ten obiekt Event ma właściwość Date, DateTime ?. To, czego chcę, to pobrać wydarzenia, które są między 2 TimeSpans.

Teraz mój kod wygląda następująco:

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; 

jest wyjątek, mówiąc mi, że „Określony element typu«TimeOfDay»nie jest obsługiwana w LINQ do podmiotów.”

Nie da się obejść tego problemu i przez cały dzień próbowałem. Proszę, pomóż mi, jestem taka sfrustrowana. :(

EDIT:..

Zapomniałem napisać tutaj „TimeOfDay” po e.Date.Value W każdym razie, ja w moim kodu

nie mogę używać DateTime bo muszę filtrować zdarzenia, które występują między pewnej porze dnia, mimo daty zdarzenia.

+1

Twój przykładowy kod nawet nie używa 'TimeOfDay' - Zakładam, że tak jest, zamiast używać' Date' (jak na twój kod)? –

+1

Dlaczego używasz dwóch obiektów TimeSpan zamiast dwóch obiektów DateTime do filtrowania zdarzeń? – Steven

Odpowiedz

13

Użyj Date and Time Canonical Functions for LINQ-to-Entities. Konkretnie, spojrzeć na

CreateTime(hour, minute, second) 

Jeśli potrzebujesz pomoc w wywołaniu funkcji kanonicznej, spójrz na How To: Call Canonical Functions.

+0

To wydaje się być na torze, nie wiedziałem o funkcjach Cannonical. Dzięki! Ale jak mogę przekonwertować DateTime na Time za pomocą tych? – Umagon

+0

@Umagon: Użyj 'datetime.Hour',' datetime.Minute' i 'datetime.Second'. – jason

+1

O mój Boże! To rozwiązało mój problem! Myślę, że cię kocham, LOL. Dziękuję Ci bardzo! : D – Umagon