use*_*426 1 c# datetime odata asp.net-core-webapi
我正在尝试在 OData 服务中查询日期时间大于或等于给定值的数据。它没有按预期工作
我已阅读文档:
https://learn.microsoft.com/en-us/odata/webapi/datetime-support#filter-datetime
组件:
重现步骤
我尝试过以下查询格式:
https://myurl/api/resource?$filter=city eq 'Kigali' and purchaseDateTime gt 2020-01-01T23:59:59.99Z &$orderby=purchaseDateTime desc HTTP 500 - 从字符串转换日期和/或时间时转换失败。
https://myurl/api/resource?$filter=city eq 'Kigali' and purchaseDateTime gt cast(2020-01-01T23:59:59.99Z,Edm.DateTimeOffset) &$orderby=purchaseDateTime desc 返回 HTTP 500 - 内部服务器错误
https://myurl/api/resource?$filter=city eq 'Kigali' and purchaseDateTime gt datetime'2020-01-01T23:59:59.99Z' &$orderby=purchaseDateTime desc
在 OData 网站上,这有效
预期结果
根据查询返回数据,与http://services.odata.org响应的方式相同
实际结果
HTTP 错误请求或 HTTP 500
微软表示这应该有效:
GET ~/Customers?$filter=Birthday lt cast(2015-04-01T04:11:31%2B08:00,Edm.DateTimeOffset)
GET ~/Customers?$filter=year(Birthday) eq 2010
Run Code Online (Sandbox Code Playgroud)
我尝试过的其他信息来源:
对于你的前两个查询,它对我有用。
https://localhost:44339/odata/Patients?$filter=city eq 'Kigali'
and purchaseDateTime gt 2020-01-01T23:59:59.99Z
&$orderby=purchaseDateTime desc
Run Code Online (Sandbox Code Playgroud)
https://localhost:44339/odata/Patients?$filter=City eq 'Kigali'
and PurchaseDateTime gt cast(2020-01-01T23:59:59.99Z,Edm.DateTimeOffset)
&$orderby=PurchaseDateTime desc
Run Code Online (Sandbox Code Playgroud)
这是 的代码model。
public class Patient
{
public ulong PatientId { get; set; }
public string Name { get; set; }
public string City { get; set; }
public DateTime PurchaseDateTime { get; set; }
public ICollection<PatientForms> PatientForms { get; set; }
}
Run Code Online (Sandbox Code Playgroud)