我首先使用EF 6代码,并且需要在dateTime上以特定格式执行sql之类的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
我现在特别想以MMM格式使用月份时,格式必须为"dd/MMM/yyyy hh:mm tt"
(2017年1月20日上午08:22)。
附带说明,如果还有另一种方法可以通过创建我自己的,从DbFunctions或SqlFunctions类扩展的函数来实现这一目标,这也可以解决问题。
我首先使用EF 6代码,并且需要在dateTime上以特定格式执行sql,例如IE:类似的事情是:我的第一次尝试是类似的事情:var users = context.User ...
要以MMM
格式获得月份,可以使用:
如果搜索特定格式的日期列很重要,那么我建议向表中添加一个计算列以显示日期/时间为字符串。像这样的解决方案要提防的是性能。对于较小到中等大小的表/数据库,这是可以接受的,但是您需要监视性能并避免使用像这样的技术作为拐杖,因为随着系统的发展,它可能会重新咬住您。