Linq中的日期时间检查声明

时间:2012-11-05 14:46:06

标签: 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")
        .OrderBy(m => m.UpdatedOn)
        .FirstOrDefault();

当我在上面运行时,应用程序抛出错误说:“ToDateTime”尚未实现。有人可以建议吗?

3 个答案:

答案 0 :(得分:2)

怎么样:

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();

答案 1 :(得分:1)

我认为,您应该使用ToDateTime类调用Convert

  Convert.ToDateTime(m.UpdatedOn).Date...

并删除之间的Date

  Convert.ToDateTime(m.UpdatedOn).ToString("dd/MMM").ToLower() == "02/nov"

答案 2 :(得分:0)

不是进行字符串比较,而是直接比较日期组件会更有效。我没有对此进行测试,但以下内容可能有效:

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();