C# Linq where语句中的日期时间检查
请参阅下面的代码:C# Linq where语句中的日期时间检查,c#,linq,entity-framework,lambda,C#,Linq,Entity Framework,Lambda,请参阅下面的代码: var pcPageList = db.PcPages .Where(m => m.Quarter == exactQuarter && m.Url == pageUrl && m.UpdatedOn.ToDateTime().Date.ToString("dd/MMM").ToLower() == "02/nov") .Orde
var pcPageList = db.PcPages
.Where(m =>
m.Quarter == exactQuarter &&
m.Url == pageUrl &&
m.UpdatedOn.ToDateTime().Date.ToString("dd/MMM").ToLower() == "02/nov")
.OrderBy(m => m.UpdatedOn)
.FirstOrDefault();
当我运行上面的程序时,应用程序抛出的错误是:“ToDateTime”尚未实现。任何人都可以提供建议吗?我认为,您应该使用
Convert
class调用ToDateTime
,如下所示:
Convert.ToDateTime(m.UpdatedOn).Date...
并删除中间的日期
,如下所示:
Convert.ToDateTime(m.UpdatedOn).ToString("dd/MMM").ToLower() == "02/nov"
我认为,您应该使用
Convert
class as调用ToDateTime
:
Convert.ToDateTime(m.UpdatedOn).Date...
并删除中间的日期
,如下所示:
Convert.ToDateTime(m.UpdatedOn).ToString("dd/MMM").ToLower() == "02/nov"
那么:
var updateStart = DateTime.ParseExact("02/nov", "dd/MMM", CultureInfo.InvariantCulture);
var updateEnd = updateStart.AddDays(1.0);
var pcPageList = db.PcPages
.Where(m =>
m.Quarter == exactQuarter &&
m.Url == pageUrl &&
m.UpdatedOn >= updateStart &&
m.UpdatedOn < updateEnd)
.OrderBy(m => m.UpdatedOn)
.FirstOrDefault();
var updateStart=DateTime.ParseExact(“02/nov”,“dd/MMM”,CultureInfo.InvariantCulture);
var updateEnd=updateStart.AddDays(1.0);
var pcPageList=db.PcPages
.其中(m=>
m、 季度==精确季度和
m、 Url==页面Url&&
m、 UpdateOn>=updateStart&&
m、 UpdateOnm.UpdatedOn)
.FirstOrDefault();
那么:
var updateStart = DateTime.ParseExact("02/nov", "dd/MMM", CultureInfo.InvariantCulture);
var updateEnd = updateStart.AddDays(1.0);
var pcPageList = db.PcPages
.Where(m =>
m.Quarter == exactQuarter &&
m.Url == pageUrl &&
m.UpdatedOn >= updateStart &&
m.UpdatedOn < updateEnd)
.OrderBy(m => m.UpdatedOn)
.FirstOrDefault();
var updateStart=DateTime.ParseExact(“02/nov”,“dd/MMM”,CultureInfo.InvariantCulture);
var updateEnd=updateStart.AddDays(1.0);
var pcPageList=db.PcPages
.其中(m=>
m、 季度==精确季度和
m、 Url==页面Url&&
m、 UpdateOn>=updateStart&&
m、 UpdateOnm.UpdatedOn)
.FirstOrDefault();
直接比较日期组件比进行字符串比较更有效。我还没有对此进行测试,但类似以下的方法可能会起作用:
var pcPageList = db.PcPages
.Where(m => m.Quarter == exactQuarter && m.Url == pageUrl)
// You may need to materialize the results of the query at this point
// or use Convert.ToDateTime(...) instead of ToDateTime()
.Select(m => new { Row = m, UpdatedOn = m.UpdatedOn.ToDateTime() })
.Where(a => a.UpdatedOn.Month == 11 && a.UpdatedOn.Day == 2)
.Select(a => a.Row)
.OrderBy(m => m.UpdatedOn)
.FirstOrDefault();
直接比较日期组件比进行字符串比较更有效。我还没有对此进行测试,但类似以下的方法可能会起作用:
var pcPageList = db.PcPages
.Where(m => m.Quarter == exactQuarter && m.Url == pageUrl)
// You may need to materialize the results of the query at this point
// or use Convert.ToDateTime(...) instead of ToDateTime()
.Select(m => new { Row = m, UpdatedOn = m.UpdatedOn.ToDateTime() })
.Where(a => a.UpdatedOn.Month == 11 && a.UpdatedOn.Day == 2)
.Select(a => a.Row)
.OrderBy(m => m.UpdatedOn)
.FirstOrDefault();
“UpdatedOn”的类型是什么?如果它已经是DateTime类型,为什么需要将其转换为DateTime?什么是“UpdatedOn”的类型?如果它已经是DateTime类型,为什么需要将其转换为DateTime?当前未实现数据库服务器端上的“System.DateTime:ToString(String)”错误仍在抛出。@coder:m.UpdatedOn中的值是多少?我也希望是字符串类型。请让我知道。我有一个错误,例如2012-11-02 17:03:52.853当前未在数据库服务器端执行“System.DateTime:ToString(String)”。仍在抛出。@coder:m.UpdateOn中的值是多少?我也希望是字符串类型。请让我知道。我有这个,例如2012-11-02 17:03:52.853这总是返回空记录,因为m.UpdatedOn有2012年11月2日12:00:00。DateTime.ParseExact返回2012年11月2日00:00:00。如果UpdateOn具有时间组件,则需要检查它是否介于两个“午夜”之间。查看我的更新答案。这始终返回空记录,因为m.UpdatedOn的记录类似于2012年11月2日12:00:00。DateTime.ParseExact返回2012年11月2日00:00:00。如果UpdateOn具有时间组件,则需要检查它是否介于两个“午夜”之间。请参阅我的最新答案。谢谢。我想这是最好的解决方案,虽然我不能使用像“02/11”这样的值。@coder为什么需要匹配像“02/11”这样的值?谢谢。我想这是最好的解决方案,尽管我不能使用像“02/Nov”这样的值。@coder为什么需要匹配像“02/Nov”这样的值?