【发布时间】:2022-01-06 10:29:56
【问题描述】:
我的应用程序使用 Entity Framework Core 从 SQL 数据库加载数据。为了避免加载我的表Schedule 的所有数据条目并在之后过滤它们,我想通过将Schedule.Date 条目(一个字符串)与先前创建的名为@ 的DateTime 对象进行比较,在数据库查询中过滤它们987654326@。由于在此查询中无法直接使用DateTime.Parse 将Schedule.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