我的URI:
$filter=IsActive eq true and IsAutomated eq true and WebSite ne null
and WebSite ne '' and LastUpdated le 2018-12-30T23:59:59.99Z
控制器:
private readonly BrokerForgeContext _ctx;
[EnableQuery(PageSize = 20)]
[HttpGet]
public IActionResult Get()
{
return Ok(_ctx.Locations);
}
启动:
private static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<CashBidPrice>("CashBidPrices");
builder.EntitySet<Location>("Locations");
builder.EntityType<CashBidPrice>().Collection.Function("DeleteToday").Returns<bool>();
return builder.GetEdmModel();
}
实体模型:
public partial class Location
{
[Key]
public int LocationId { get; set; }
public int? Loc_Id { get; set; }
public string Name { get; set; }
**[[ REMOVED FOR BREVITY ]]**
public DateTime? LastUpdated { get; set; }
}
我想获取
LastUpdate
记录少于今天的所有位置,但在过滤 LastUpdated
记录时遇到一些重大问题。其他一切都很好。
错误:
处理请求时发生未处理的异常。 SqlException:从字符串转换日期和/或时间时转换失败。
System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection,ActionwrapCloseInAction)
TargetIncationException:调用目标已引发异常。
System.RuntimeMethodHandle.InvokeMethod(对象目标,对象[]参数,签名sig,布尔构造函数,布尔wrapExceptions)
好吧,经过大量的尝试和错误。数据库列是 DateTime 类型。所以我用这个脚本来改变它:
ALTER TABLE Locations
ADD LastUpdated2 datetimeoffset
GO
UPDATE Locations
SET LastUpdated2 = LastUpdated
ALTER TABLE Locations
DROP COLUMN LastUpdated
我使用 SSMS 手动将 LastUpdated2 重命名为 LastUpdated
然后我将实体模型更改为 DateTimeOffset 类型
public DateTimeOffset? LastUpdated { get; set; }
我的新 URI 过滤器是:
?$filter=IsActive eq true 和 IsAutomated eq true 和 WebSite ne null 和 WebSite ne '' 和 LastUpdated lt 2018-12-30T23:59:59.99Z