2012-04-18 28 views
16

Sto cercando di fare questo:Linq: Differenza tra 2 DateTimes in TimeSpan

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

sto ottenendo gli "argomenti DbArithmeticExpression deve avere un numerico tipo comune" errore. Come posso fare questo, considerando che ho bisogno della differenza in un TimeSpan?

Grazie in anticipo.

+0

A cosa ti stai connettendo? Questo è linq per SQL, EF, ti aspetti che questo venga fatto in memoria? Modifica: notato che c'è un tag per questo; Sarebbe utile menzionare qualcosa di così importante nel corpo della domanda. – Servy

+0

Linq to Entities. – Leila

risposta

26

Si consiglia di utilizzare SqlFunctions.DateDiff

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

prego di dirmi, qual è il significato di "seconda" parola nel codice sopra, ed è vero numero di giorni di ritorno o no ... ??? per favore mi menzione nella vostra risposta ... –

+1

@RahulChaudhari Si sta tornando il numero di secondo di qui la parola "secondo". Se vuoi giorni scrivi "giorno". – Magnus

+1

ok, grazie tu sei il capo di C# ... –

2

aritmetica con DateTime non è supportata in Entity Framework. Devi usare uno dei SqlFunctions. Così, per la sua dichiarazione, qualcosa di simile:

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

Sorry about the vote down. Si prega di modificare leggermente la risposta e posso quindi rimuoverlo. – Phil

4

È inoltre possibile utilizzare questo;

var result = db.Tickets.Where(t => 
     SqlMethods.DateDiffSecond(myTicket.Date , t.Date) < 120); 
Problemi correlati