2011-01-28 9 views
8

esecuzione di questo codice:DateTime manipolazione all'interno LINQ to entità interrogare

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; 
      } 


     } 

ottengo questo errore.

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

TotalTimeMin è int. Non sono sicuro di quale sia la causa: AssignmentDateTime è DateTime? e forse questo è il problema?

+0

Il problema è che LINQ-to-Entities non sa come tradurre DateTime.AddMinutes nella lingua del datastore (probabilmente SQL). Forse questo ti indicherà la giusta direzione. Avrò bisogno di più tempo per trovare una soluzione per te. –

+0

Grazie, in realtà ho giocato un po 'e probabilmente hai ragione, non importa quello che faccio, non posso usare AddMinnute all'interno della query (anche se posso facilmente scriverlo con SQL ....) – Dani

risposta

16

Usa EntityFunctions.AddMinutes (richiede 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; 
     } 
    } 

Nota che assignments sarà mai essere nullo (ma potrebbe essere vuoto - test di assignments.Any()).

+0

Grazie. (Ho omesso il ToList e controllo per contare ... ma il EntityFunctions è nuovo per me e quello che stavo cercando. – Dani

+3

Apparentemente le funzioni di entità sono obsolete. Si può usare DbFunctions.AddMinutes() ora (EF 6.x) . – UnreliableWitness