2012-04-18 81 views
16

estoy tratando de hacer esto:LINQ: Diferencia entre 2 DateTime en TimeSpan

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

Me estoy poniendo los "argumentos DbArithmeticExpression debe tener un tipo común numérico" de error. ¿Cómo puedo hacer esto, teniendo en cuenta que necesito la diferencia en un TimeSpan?

Gracias de antemano.

+0

¿A qué estás conectando? ¿Es esto linq a SQL, EF? ¿Esperas que esto se haga en la memoria? Editar: noté que hay una etiqueta para eso; Sin embargo, sería útil mencionar algo importante en el cuerpo de la pregunta. – Servy

+0

Linq a las entidades. – Leila

Respuesta

26

Usted desea utilizar SqlFunctions.DateDiff

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

por favor dígame, ¿cuál es el significado de "segunda" palabra en su código anterior, y está devolviendo el número de días o no ... ??? por favor mencióname en su respuesta ... –

+1

@RahulChaudhari Devuelve el número de segundos, de ahí la palabra "segundo". Si quieres días, escribe "día". – Magnus

+1

bien, gracias, eres el jefe de C# ... –

2

aritmética con DateTime no se admite en el marco de la entidad. Tienes que usar uno de los SqlFunctions. Entonces, para su extracto, algo como:

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

Disculpa por el voto negativo. Por favor, modifique su respuesta un poco y luego puedo eliminarla. – Phil

4

También puede usar esto;

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