2009-11-20 3 views
5

LINQ-to-Entities 쿼리 식에서 직접 서식이 지정된 날짜 문자열을 가져 오려고합니다. . '하는 System.Object'에만 엔터티 데이터 모델 원시 타입 캐스팅을 지원 엔티티에 LINQ를 입력 유형 'System.Nullable`1'를 캐스팅 할 수 "없습니다Linq-to-Entities : 형식 선택 쿼리 식의 날짜

nonBusinessDays = (from ac in db.AdminCalendar 
        where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
        select ac.MonthValue + "/" + ac.DayOfMonth + "/" + ac.FullYear).ToList(); 

는하지만, 나는 folloinw 오류 메시지가 표시됩니다. "

결과 집합을 반복하는 것 외에이 작업을 수행 할 수있는 방법이 있습니까? 감사합니다. 아베

답변

9

나는 하나의 해결 방법을 발견

nonBusinessDays = (from dt in 
          (from ac in db.AdminCalendar 
          where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
          select ac.DateTimeValue).ToList() 
        select string.Format("{0:M/d/yyyy}", dt)).ToList(); 
+1

당신이 겪고있는 문제는 그것의 실행 유효한 SQL에 ToString을 번역하는 시도이다 서버에서 - 그리고 그때 그 일을하지 못했습니다. 중첩 된 쿼리는 할 수있는 쿼리에서 수행 할 수없는 .ToString을 분리한다는 것을 의미합니다. 따라서 작동 할 수 있습니다. – Murph

+1

고마워요! 이제는 의미가 있습니다. LINQ는 함수를 존재하지 않는 SQL 함수에 매핑하려고합니다. 제 해결 방법은 먼저 데이터를 목록으로 가져 와서 목록을 처리하는 것입니다. – Abe

+0

게으른로드가 범인입니다. –

0

ToString을 사용하도록 선택을 변경해보십시오 :

nonBusinessDays = (from ac in db.AdminCalendar 
        where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
        select ac.DateTimeValue.ToString("MM/dd/yyyy")).ToList(); 
+0

아쉽게도 ToString 메서드를 실행할 수 없습니다. 여기에 예외가 있습니다. LINQ to Entities가 'System.String ToString (System.String)'메서드를 인식하지 못하고이 메서드를 저장소 식으로 변환 할 수 없습니다. – Abe