【问题标题】:Replace the SQL query with the LINQ query用 LINQ 查询替换 SQL 查询
【发布时间】:2021-12-26 07:00:34
【问题描述】:

我有 SQL 查询,它检查今天的日期,以检查表中存储 3 个字母字符的字段,如下所示

如果今天是星期二,我需要返回记录。我有类似的 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

由于该表位于 Azure SQL 中,并且我的应用程序在东部时区运行,所以我现在正在使用 SUBSTRING(DATENAME(weekday, getdate() AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time'), 0, 4),所以我想将上述查询更改为如下所示的 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() 在当前上下文中不存在。非常感谢任何帮助

【问题讨论】:

  • 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
  • @DaleK 当然谢谢!我只是想在数据库中显示它的值
  • 只显示为表格数据,定义显示 DDL。
  • @DaleK 当然!你能帮我解决这个问题吗

标签: sql sql-server linq select azure-sql-database


【解决方案1】:

你不能在 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

【讨论】:

  • 谢谢!!!有没有办法在 where 子句中将字段 s.OrderDay 设为大写
  • @user4912134 如果你真的不关心大写,你可以使用 StringComparer.OrdinalIgnoreCase 或者你可以使用 Equals 并尝试得到它。据我所知,最好(如果可以的话)在数据库中创建一个视图或存储过程,并根据需要获取数据,然后在视图或存储过程上使用 linQ。因为您也不能使用 ToUpper :S 如果此答案对您有帮助,请不要忘记投票或将其标记为答案,或者如果您需要更多帮助,请在这里问我,我很乐意回答您:)
  • 谢谢!!我遇到了另一个与它无关的问题,但你能告诉我你是否可以帮助我stackoverflow.com/questions/69969014/…
  • @user4912134 没问题。对不起,我昨天晚上睡得很晚。让我看看我是否知道,它是怎么回事
猜你喜欢
  • 1970-01-01
  • 2014-11-16
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 2012-06-18
  • 2015-11-29
相关资源
最近更新 更多