【问题标题】:What does casting a string to DateTime in an Entity Framework Core LINQ query return?在 Entity Framework Core LINQ 查询中将字符串强制转换为 DateTime 会返回什么?
【发布时间】:2022-01-06 10:29:56
【问题描述】:

我的应用程序使用 Entity Framework Core 从 SQL 数据库加载数据。为了避免加载我的表Schedule 的所有数据条目并在之后过滤它们,我想通过将Schedule.Date 条目(一个字符串)与先前创建的名为@ 的DateTime 对象进行比较,在数据库查询中过滤它们987654326@。由于在此查询中无法直接使用DateTime.ParseSchedule.Date 转换为DateTime,因此我将其转换为object,然后显式转换为DateTime。以下行代表我正在做的事情:

Schedule schedule = _context.Schedule.Where(s => (DateTime)(object)s.Date >= targetDate).First();

目前这工作正常。但是,我不想以后遇到问题,所以我需要了解在这种情况下转换为DateTime 使用哪种格式。尽管数据库中的日期是字符串,但它们都以 en-US 的格式提供,并且投射它们似乎只使用这种格式,这很好。我如何确定它始终使用这种格式,以及在使用这样的演员表时如何确定要使用的格式?

【问题讨论】:

  • Schedule.Date 设置为Date and Time data types 的最佳解决方案。
  • 为什么不能直接使用DateTime.Parse?其实,如果你知道格式,我会直接去DateTime.ParseExact
  • @HamletHakobyan 我同意,但我无法更改数据库中的数据类型。
  • @Nyerguds 它会引发异常,因为 EF 无法将 DateTime.Parse 转换为数据库查询。否则我会这样做。
  • @Nyerguds 异常告诉我使用 DateTime.Parse 的 LINQ 表达式无法转换为 SQL。这几乎就是这里要问的:stackoverflow.com/questions/68728498/… 但这不是我的问题。我不一定要寻找替代解决方案。我的目的是准确了解我的示例中发生了什么,因为我自己无法找到它。

标签: c# entity-framework linq datetime


【解决方案1】:

假设您使用的是 SQL Server

虽然数据库中的日期是字符串,

由于多种原因,这很糟糕。在这里,您需要进行表扫描以将所有字符串转换为日期以执行比较。

它们都以 en-US 格式提供,并且投射它们似乎只使用这种格式,这会很棒。我如何确定它始终使用这种格式,以及在使用这样的演员表时如何确定要使用的格式?

转换在 SQL Server 中完成,它将根据连接的当前language 将字符串转换为日期。

【讨论】:

  • 我同意不对这些列使用日期时间数据类型是错误的!但是您的回答使我朝着正确的方向前进。转换使用会话中用户的默认语言执行。由于我与“sa”联系,我能够通过更改语言来影响 DateTime 演员的结果。
猜你喜欢
  • 2021-10-14
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
相关资源
最近更新 更多