2013-05-23 5 views
0

다음 코드 조각을 사용하여 오류가 발생했습니다.이 오류는 ConditionRatingList에없는 것으로 가정합니다 모든 값. 누구든지 linq 문 내에서이를 수정하는 방법에 대한 제안 사항이 있습니까?Linq to Entities : 문자열 데이터 형식을 datetime 데이터 형식으로 변환하면 범위를 벗어난 datetime 값이 발생 함

명세서 니펫

Dim lst = From a In _context.Assets 
      Order By a.AssetIdentifier 
      Select New With { 
      .AssetID = a.AssetID, 
      .ConditionRating = a.ConditionRatingList.OrderByDescending(Function(o) o.DateCompleted).Select(Function(o) o.Rating).FirstOrDefault, 
      .ConditionRatingDate = a.ConditionRatingList.OrderByDescending(Function(o) o.DateCompleted).Select(Function(o) o.DateCompleted).FirstOrDefault} 

오류 생성 ". 날짜 시간 데이터 유형으로 문자 데이터 형식의 변환이 범위를 벗어난 시간 값 결과" 은

답변

0

적어도 하나가 있다면 조건 등급 날짜 만 가져 와서 값을 1/1/1753으로 설정했는지 확인하여이 문제를 해결했습니다.

.ConditionRatingDate = If(a.ConditionRatingList.Count > 0, a.ConditionRatingList.OrderByDescending(Function(o) o.DateCompleted).Select(Function(o) o.DateCompleted).FirstOrDefault, New Date(1753, 1, 1)) 

나는 IF의 거짓 값을() NOTHING 또는 Date.MinVlue 할 수 나는 그것이로 그 번역 된 생성 된 SQL을보고, 문제가 계속 허용하는 경우;

CASE WHEN ([Project8].[C3] > 0) THEN CASE WHEN ([Project8].[C1] IS NULL) THEN convert(datetime, '0001-01-01 00:00:00.000', 121) ELSE [Project8].[C2] END ELSE convert(datetime, '0001-01-01 00:00:00.000', 121) END AS [C15] 

또는

CASE WHEN ([Project8].[C3] > 0) THEN CASE WHEN ([Project8].[C1] IS NULL) THEN convert(datetime, '0001-01-01 00:00:00.000', 121) ELSE [Project8].[C2] END ELSE '#12:00' END AS [C15] 

쿼리가 제대로 실행, 내가 무엇을 1753년 1월 1일 수단으로 내 사용자를 교육 할 필요가 불과합니다.

관련 문제