2012-02-22 3 views
0

DateTime 속성으로 개체를 쿼리 할 수 ​​없습니다.WCF WebApi IQueryable이 DateTime 속성과 함께 작동하지 않습니다.

public class MyModel 
{ 
    public int Id { get; set; } 
    public DateTime TimeStamp { get; set; } 
} 


[ServiceContract] 
public class BuildJobApi 
{ 
    [WebGet] 
    public IQueryable<MyModel> GetMyModels() 
    { 
     return _service.GetMyModels(); // IQueryable<MyModel> 
    } 
} 

WCF WebApi v0.5.0 및 0.6.0을 사용해 보았는데 모두 오류 메시지를 표시합니다. 여기

이드에 의해 쿼리 (WebApi에 의해) 생성 된 URL입니다 (작품) : 여기

/api/models?$filter=(Id eq 100) 

는 타임 스탬프에 의해 쿼리 생성 된 URL입니다 (작동하지 않습니다) :

/api/models?$filter=TimeStamp ge DateTime'2012-02-22T00:00:00' 

I을 날짜 부분 (작품)까지도 쿼리 할 수 ​​있습니다.

/api/models?$filter=(year(ExceptionDateTime) eq 2012) 

정확한 오류 메시지는 500/내부 서버 오류입니다.

The server encountered an error processing the request. See server logs for more details. 

Q : 별도로 각 부분을 조회하지 않고 날짜 시간 특성을 조회 할 수 있나요 메시지와 함께?

+0

'MyModel'은 DataContract로 표시되어 있으며 DateTime 속성이 TimeStamp인지 맞습니까? –

+0

DataContract로 표시되어 있지 않습니다. TimeStamp는이 데모의 목적을위한 propery의 이름이고, DateTime은 유형입니다. – joelnet

+0

DataContract 여야합니다. TimeStamp에 관해서는 - 물론 :). –

답변

2

DateTime을 직렬화하지 않으려면 문자열을 사용하십시오.

예 :

public class MyModel 
{ 
    public int Id { get; set; } 
    public string TimeStamp { get; set; } 
} 

new MyModel { Id = 123, TimeStamp = DateTime.Now.ToString("o") }; 

"o"는 (배양 불변 안정된 포맷)을 ISO 8601 형식이다.

+1

글쎄, 몇 달이 지났지 만 나는 이것을 해결할 수 없었다. DateTime은 IQueryable에서 지원되지 않을 수도 있습니다. datetime을 문자열로 받아들이도록 IQuerable 메서드를 수정했습니다. – joelnet