2012-02-22 1 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, оба бросают сообщения об ошибках.

Вот URL генерируется (с помощью WebAPI) запрос по Id (работ):

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

Вот URL генерируется запрос по TimeStamp (не работает):

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

I может также запрашивать по дате (работы):

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

Точное сообщение об ошибке 500/Internal Server Error. С сообщением:

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

Q: Есть ли что-нибудь, что можно сделать, чтобы запросить свойства DateTime без запроса каждой части по отдельности?

+0

Является ли 'MyModel' помеченным как DataContract, и правильно ли это свойство DateTime является TimeStamp? –

+0

Он не помечен как DataContract. TimeStamp - это имя свойства (для целей этой демонстрации), 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. Я изменил свой метод IQuerable, чтобы принять datetime как строку. – joelnet