将 SQL 查询替换为 LINQ 查询

Replace the SQL query with the LINQ query

我有一个 SQL 查询,它检查今天要对照 table 中存储 3 个字母字符的字段进行检查,如下所示

如果今天是星期二我需要return记录。我有 SQL 查询

  SELECT TOP 1 [EndTime],[StartTime],[OrderDay]
         FROM[dbo].[Settings]
         where SUBSTRING(DATENAME(weekday, getdate() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time'), 0, 4) = OrderDay

由于 table 在 Azure SQL 中,而我的应用程序 运行 在东部时区,所以我正在做 SUBSTRING(DATENAME(weekday, getdate() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time'), 0, 4) 现在我正在使用 EF 核心所以我想将上面的查询更改为如下所示的 LINQ 查询

  settings_data = from s in _context.Settings
                  where SUBSTRING(DATENAME(weekday, getdate() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time'), 0, 4) = s.OrderDay
                  select s;

它说 SUBSTRING() 在当前上下文中不存在。非常感谢任何帮助

您不能在 LinQ 中执行此操作,因为您不能在 select 或 where.

中使用集成函数

您必须执行以下操作:

string myCondition = DateTime.UtcNow.DayOfWeek.ToString().Substring(0,3);

  settings_data = from s in _context.Settings
                  where  s.OrderDay = myCondition 
                  select s;

您可以使用 DateTime.Now 或 DateTime.UtcNow 进行 UTC 实时。 DayOfWeek 将为您提供当天的名称,然后对于 Substring:0 是开始,3 是长度。

更新:

要获得 Eastern Standard Time,您可以使用:

var timeUtc = DateTime.UtcNow;
TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, easternZone);

然后:

string myCondition = easternTime.DayOfWeek.ToString().Substring(0,3); 

测试一下: https://dotnetfiddle.net/YFwnZo