2012-04-18 15 views
16

Próbuję to zrobić:LINQ: Różnica między 2 DateTimes w TimeSpan

Tickets.Where(t => (t.Date - myTicket.Date) < TimeSpan.FromSeconds(120)); 

Dostaję te „argumenty DbArithmeticExpression musi mieć numeryczny spotykanym typem” błąd. Jak mogę to zrobić, biorąc pod uwagę, że potrzebuję różnicy w TimeSpanie?

Z góry dziękuję.

+0

Z czym się łączysz? Czy to jest linq do SQL, EF, czy spodziewacie się tego w pamięci? Edycja: zauważyłem, że jest tam tag; byłoby pomocne wspomnieć o czymś ważnym w treści pytania. – Servy

+0

Linq do encji. – Leila

Odpowiedz

26

co chcesz używać SqlFunctions.DateDiff

Tickets.Where(t => 
     SqlFunctions.DateDiff("second", t.Date, myTicket.Date) < 120)); 
+0

proszę mi powiedzieć, jakie jest znaczenie "drugiego" słowa w powyższym kodzie, i czy to powracająca liczba dni czy nie ... ??? proszę wspomnieć o mnie w swojej odpowiedzi ... –

+1

@RahulChaudhari Zwraca liczbę sekund, stąd słowo "drugi". Jeśli chcesz dni, napisz "dzień". – Magnus

+1

ok, dziękuję, że jesteś szefem C# ... –

2

arytmetyczne z DateTime nie jest obsługiwana w Entity Framework. Musisz użyć jednego z SqlFunctions. Tak więc, dla Twojego oświadczenia, coś takiego:

Tickets.Where(t => 
     SqlFunctions.DateDiff("second", t.Date, myTicket.Date) < 120)); 
+0

Przepraszamy za głosowanie w dół. Zmień nieco odpowiedź, a następnie mogę ją usunąć. – Phil

4

Możesz również użyć tego;

var result = db.Tickets.Where(t => 
     SqlMethods.DateDiffSecond(myTicket.Date , t.Date) < 120); 
Powiązane problemy