【发布时间】:2019-01-28 22:05:37
【问题描述】:
我首先使用 EF 6 代码,需要在特定格式的 dateTime 上执行 sql,例如:
我的第一次尝试是这样的:
var users = context.User
.Where(x => x.BirthDate.ToString("dd/MMM/yyyy h:mm tt").Contains(searchTerm).ToList()
抛出异常,因为 EF 不知道如何将 DateTime.ToString() 转换为 SQL,这是有道理的。
到目前为止,我发现的最佳解决方案来自此页面:Entity Framework 6 ToString(), formatting (DateTime format), query intercept,其中回答者使用以下函数:SqlFunctions.DatePart 和 DbFunctions.Right 生成一个字符串,EF 可以执行 Contains 但是对于我场景我特别需要格式为"dd/MMM/yyyy hh:mm tt"(2017 年 1 月 20 日上午 8 点 22 分),此时我正努力以 MMM 格式度过一个月。
附带说明,如果有另一种方法可以通过创建我自己的从 DbFunctions 或 SqlFunctions 类扩展的函数来实现这一点,这也可以解决问题。
【问题讨论】:
-
我建议您使用
TryParseExact转换您的输入日期,并在您的查询过滤器中使用生成的DateTime变量
标签: c# entity-framework linq datetime iqueryable