如何将DateTime参数发送到WCF DataService

shl*_*omi 11 wcf

我在DataService上有一个简单的函数来获取DateTime参数

[WebGet]
public IQueryable<Job> LoadJobsByDate(DateTime startDate, DateTime endDate)
{
    var context = this.CurrentDataSource;

    var jobs = from j in context.Jobs
               where j.CreatedDate >= startDate && j.CreatedDate <= endDate
               select j;

    return jobs;
}
Run Code Online (Sandbox Code Playgroud)

我试图发送什么语法我得到错误.

我试过了

var query1 = newContext.CreateQuery<Job>("LoadJobsByDate")
             .AddQueryOption("startDate", 
                 string.Format ("'{0:yyyy-MM-ddTHH:mm:ss}'", DateTime.Now));  
Run Code Online (Sandbox Code Playgroud)

要么:

var query1 = newContext.CreateQuery<Job>("LoadJobsByDate")
             .AddQueryOption("startDate", 
                 string.Format ("'datetime{0:yyyy-MM-ddTHH:mm:ss}'", DateTime.Now));  
Run Code Online (Sandbox Code Playgroud)

请指教

Hal*_*Hal 24

您可以DateTime使用ISO 8601时间戳格式通过HTTP请求向服务提交对象,该格式将时间表示为yyyy-mm-ddThh:mm:ss(示例:) 2011-06-02T12:24:34.


mar*_*c_s 4

我不认为(根据我的测试和实验)您可以DateTime直接传递类型参数。毕竟,最终(在 WCF DataService 客户端代理的所有优点及其 LINQ 到 WCF 的优点之后),WCF 数据服务始终从 URL 查询字符串获取其参数,所以基本上,它都只是字符串....

(这与使用 WCF 的 SOAP 绑定形成鲜明对比 - 在那里,您绝对可以使用强类型参数 -DateTime以及任何您喜欢的东西。但是 WCF 数据服务是 REST,它都是基于 URL 的,因此也是基于字符串的)

所以我的结论是:您需要更改代码以使用string参数,然后将它们转换为DateTime方法内部:

[WebGet]
public IQueryable<Job> LoadJobsByDate(string startDate, string endDate)
{
    // some error checking needs to be done here! If 'startDate' or 'endDate'
    // are NULL or emtpy string --> fall back to a default

    // also - you might want to check into .ParseExact and define a list of valid,
    // supported date formats that you want to offer your users
    DateTime startDt = DateTime.Parse(startDate);
    DateTime endDt = DateTime.Parse(endDate);

    var context = this.CurrentDataSource;

    var jobs = from j in context.Jobs
               where j.CreatedDate >= startDt && j.CreatedDate <= endDt
               select j;

    return jobs;
}
Run Code Online (Sandbox Code Playgroud)

正如我在代码片段中提到的 - 必须获取字符串并将它们解析DateTime为要求您对自己的部分进行一些额外的错误检查 - 这是一个痛苦,但我认为有必要确保您的代码不会在第一次有人破坏时未输入日期或日期格式无效......