2017-12-05 10 views
-1

에 LINQ에 '으로 System.Object'를 입력 유형 'System.DateTime'를 캐스팅 할 수 없습니다 나는 다음과 같은 코드가 있습니다엔티티

public static IQueryable<T> ApplyOrdering<T>(this IQueryable<T> query, IQueryObject queryObject, Dictionary<string, Expression<Func<T, Object>>> columnsMap) 
    { 
     if (String.IsNullOrWhiteSpace(queryObject.SortBy) || !columnsMap.ContainsKey(queryObject.SortBy)) 
      return query; 

     if (queryObject.IsSortAscending) 
      return query.OrderBy(columnsMap[queryObject.SortBy]); 
     else 
      return query.OrderByDescending(columnsMap[queryObject.SortBy]); 
    } 

을하지만 사전에 객체가 있다면 나는 다음과 같은 오류가 발생합니다 날짜 :

'System.DateTime'형식을 'System.Object'형식으로 변환 할 수 없습니다. LINQ to Entities는 EDM 프리미티브 또는 열거 형을 캐스팅하는 기능 만 지원합니다.

이것은 내가 위의 확장 메서드 호출을 통해 전달하는 columnsMap에 대한 코드 :

var columnsMap = new Dictionary<string, Expression<Func<Post, Object>>> 
    { 
      ["createdDate"] = p => p.CreatedDate 
    }; 

    query = query.ApplyOrdering(queryObject, columnsMap); 

어떻게 해결할 수 있습니까?

+0

어떤 라인에서 예외가 발생합니까? – mjwills

+0

문제는 매핑하는 것보다 오히려 주문하는 것 같습니다 – abatishchev

+0

@abatishchev 매핑의 문제점은 무엇입니까? 내 업데이트 된 코드를 참조하십시오. – adam78

답변

0

내가 문제가 Expression<Func<T, Object>>> columnsMap

DateTime에서 클래스되지 않는 당신의 서명이 객체를 기다릴 그래서 만약 구조체이라고 생각하고 기본 유형을 통과, 그것은 예외가 발생합니다.

그러나 현재 수정 방법을 모르겠습니다.