2011-01-28 22 views
8

la ejecución de este código:manipulación DateTime dentro de LINQ to Entities

public bool CheckTime(DateTime date, int UserID, int TotalTimeMin) 
     { 
      using (var context = new myDB()) 
      {   
       var assginments = from c in context.Assignments.Where(x=>(x.AssignmentDateTime < date && x.AssignmentDateTime.Value.AddMinutes(TotalTimeMin) > date) || 
        (x.AssignmentDateTime < date.AddMinutes(TotalTimeMin))) select c; 

       if(assginments != null) return false; 
       else return true; 
      } 


     } 

consigo este error.

LINQ to Entities does not recognize the method 'System.DateTime AddMinutes(Double)' method, and this method cannot be translated into a store expression. 

TotalTimeMin es int. No estoy seguro de por qué: AssignmentDateTime is DateTime? y tal vez este es el problema?

+0

El problema es que LINQ-to-Entities no sabe cómo traducir DateTime.AddMinutes en el idioma de su almacén de datos (probablemente SQL). Quizás eso te dirija en la dirección correcta. Necesitaré más tiempo para encontrar una solución para ti. –

+0

Gracias, en realidad he jugado un poco con eso y probablemente estés en lo cierto, no importa lo que haga, no puedo usar AddMinnute dentro de la consulta (aunque puedo escribirlo fácilmente con SQL ...) – Dani

Respuesta

16

Uso EntityFunctions.AddMinutes (requiere EF 4):

public bool CheckTime(DateTime date, int UserID, int TotalTimeMin) 
    { 
     using (var context = new myDB()) 
     {   
      var assginments = context.Assignments 
            .Where(x=>(x.AssignmentDateTime < date 
               && EntityFunctions.AddMinutes(x.AssignmentDateTime,TotalTimeMin) > date) 
               || (x.AssignmentDateTime < date.AddMinutes(TotalTimeMin))); 

      if(assginments != null) return false; 
      else return true; 
     } 
    } 

Tenga en cuenta que nunca se assignments se ser nulo (pero podría estar vacío - prueba assignments.Any()).

+0

Gracias. (He omitido ToList y comprobé el recuento ... pero EntityFunctions es nuevo para mí y es lo que estaba buscando. – Dani

+3

Aparentemente Entityfunctions está obsoleto. Se puede usar ahora DbFunctions.AddMinutes() (EF 6.x) . – UnreliableWitness

Cuestiones relacionadas