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”这样的值?