2012-02-22 4 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を使用してみましたが、どちらもエラーメッセージを表示しています。ここで

がIdで照会する(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/Internal Server Errorです。

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

Q:は別に、各パートを照会せずに日付と時刻のプロパティを照会するためにできることは何もありませんか?メッセージ付き

+0

「MyModel」はDataContractとマークされていますが、DateTimeプロパティがTimeStampであることが正しいですか? –

+0

DataContractとしてマークされていません。 TimeStampは(このデモの目的で)プロパティの名前で、DateTimeは型です。 – joelnet

+0

これはDataContractでなければなりません。タイムスタンプは - もちろんです:) –

答えて

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

関連する問題