2011-01-28 6 views
8

이 코드를 실행 쿼리 :날짜 시간 조작

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


     } 

나는이 오류가 발생합니다.

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입니다. 이 문제의 원인은 확실하지 않습니다. AssignmentDateTime은 DateTime입니까? 어쩌면 이것이 문제일까요?

+0

문제는 LINQ-to-Entities가 DateTime.AddMinutes를 데이터 스토어 언어 (SQL)로 변환하는 방법을 모르는 것입니다. 어쩌면 그것은 올바른 방향으로 당신을 가리킬 것입니다. 실제로 해결책을 찾기 위해 더 많은 시간이 필요합니다. –

+0

감사합니다. 저는 실제로 그걸 가지고 놀았어요. 당신이 옳은 것 일지라도, 내가하는 일에 상관없이 쿼리 내에서 AddMinnute를 사용할 수는 없습니다. (SQL로 쉽게 작성할 수는 있지만 ....) – Dani

답변

16

사용 EntityFunctions.AddMinutes이 (EF 4 필요) : assignments 것이다 결코가 null 것이

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

주 (하지만 비어있을 수 있습니다 - 시험 assignments.Any()).

+0

고마워요. (ToList를 생략하고 개수를 확인했습니다 ... 그러나 EntityFunctions는 새로운 것이고 내가 찾고있는 것입니다. – Dani

+3

Entity 함수는 현재 사용되지 않습니다. 이제 DbFunctions.AddMinutes()를 사용할 수 있습니다 (EF 6.x). . – UnreliableWitness

관련 문제