gpt4 book ai didi

asp.net-core - 如何使用 .NET Core Web API 和 OData v4 过滤 SQL Server DateTime

转载 作者:行者123 更新时间:2023-12-04 17:30:05 24 4
gpt4 key购买 nike

我正在使用 OData Query v4 和 SQL Server 2012 运行一个简单的 .NET Core WebApi 应用程序。

这有效,但速度非常慢:

GET /api-endpoint?$filter=date(MyDateTimeField) ge 2018-01-01&$top=100

由上述 URL 生成的 SQL 查询:
SELECT TOP 100 * FROM MyTable WHERE ((((DATEPART(year, [MyDateTimeField]) * 10000) + (DATEPART(month, [MyDateTimeField]) * 100)) + DATEPART(day, [MyDateTimeField])) >= (((2018 * 10000) + (1 * 100)) + 1))

当我尝试这样做时:
GET /api-endpoint?$filter=MyDateTimeField ge 2018-01-01T00:00:00.00Z&$top=100

它生成以下 SQL 查询:
SELECT TOP 100 * FROM MyTable WHERE [MyDateTimeField] > '2018-01-01T00:00:00.0000000'

返回此错误:

Conversion failed when converting date and/or time from character string.



生成与此类似的 SQL 查询的 OData 查询语法是什么?
SELECT TOP 100 * FROM MyTable WHERE [MyDateTimeField] > '2018-01-01'

最佳答案

假设字段为MyDateTimeField datetime 而不是 datatime2 ,装修MyDateTimeField带有列注释 [Column(TypeName="datetime")] 首先 :

public class MyTable
{
// ... other props

[Column(TypeName="datetime")]
public DateTime MyDateTimeField {get;set;}
}

查询 datetime , cast 它变成 DateTimeOffset :
?$filter=MyDateTimeField ge cast(2018-01-01T00:00:00.00Z,Edm.DateTimeOffset)

生成的 sql是这样的:
  SELECT ..., [$it].[MyDateTimeField], 
FROM [MyTable] AS [$it]
WHERE [$it].[MyDateTimeField] >= '2018-01-01T08:00:00.000'

请注意 datetime以上是 2018-01-01T08:00:00.000 而不是 2018-01-01T00:00:00.0000000 .

Demo截图:

enter image description here

关于asp.net-core - 如何使用 .NET Core Web API 和 OData v4 过滤 SQL Server DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56070265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com