gpt4 book ai didi

c# - Entity Framework 中的 Datetime.UtcNow 查询的计算结果与 C# IL 中的 DateTime.UtcNow 不同

转载 作者:太空狗 更新时间:2023-10-29 22:57:54 27 4
gpt4 key购买 nike

EF 查询中的 DateTime 函数是否由 SQL Server 计算,就像查询表达式之外的 DateTime 函数由运行 IL 的计算机计算一样?

我有一个包含 SalesOrders 的应用程序

public class SalesOrder
{
public Int32 OrderID {get;set;}
public DateTime Expiration {get;set;}
}

当我执行此操作时,我运行 EF 查询并得到不同的结果:

DateTime utcnow = DateTime.UtcNow;

var open = (from a in context.SalesOrders
where a.Expiration > utcnow
select a).ToList();

比我这样做时:

var open = (from a in context.SalesOrders
where a.Expiration > DateTime.UtcNow
select a).ToList();

我认为这是因为 Entity Framework 查询中的 DateTime.UtcNow 由 SQL Server 计算,而查询外部的 DateTime.UtcNow 由运行 IL 的计算机计算; I'm basing that off this answer

我在 Azure 平台即服务中,使用 Azure SQL DB 进行本地调试(如果有的话)。

最佳答案

你的想法是正确的。

在 SQL Server 上,您的第一个查询运行以下 SQL 查询:

exec sp_executesql N'SELECT 
[Extent1].[OrderID] AS [OrderID],
[Extent1].[Expiration] AS [Expiration]
FROM [dbo].[SalesOrders] AS [Extent1]
WHERE [Extent1].[Expiration] > @p__linq__0',N'@p__linq__0 datetime2(7)',@p__linq__0='2016-01-08 20:05:25.4433282'

这里很明显,客户端的时间是作为参数传入的。

您的第二个查询将其发送到 SQL Server:

SELECT 
[Extent1].[OrderID] AS [OrderID],
[Extent1].[Expiration] AS [Expiration]
FROM [dbo].[SalesOrders] AS [Extent1]
WHERE [Extent1].[Expiration] > (SysUtcDateTime())

这里很明显使用了SQL Server时钟。

关于c# - Entity Framework 中的 Datetime.UtcNow 查询的计算结果与 C# IL 中的 DateTime.UtcNow 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34685065/

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