如何获取 Datetimeoffset 的值月份?

How do I get the value month of Datetimeoffset?

我有一个包含 datetimeoffset 的数据列表?作为里面的一列。我想获取具有所需月份但不知道如何获取的特定数据。下面是我试过的那些代码。

这个 return 我有 No overload for method 'Tostring' 的错误,这很奇怪,因为我可以传递 datetimeoffset?并在其他功能中使用它,但如果我直接在获取它的地方进行操作,我将无法使用它。

      int d = DateTime.Now.Month;
      string f = d.ToString();
      var s = _dbContext.Documents.FirstOrDefault(x => x.ApplyDate.ToString("MM") == f);
      return Json(s);

这个return空

      int d = DateTime.Now.Month;
      string f = d.ToString();
      var s = _dbContext.Documents.FirstOrDefault(x => x.ApplyDate.Value.ToString("MM") == f);
      return Json(s);

您可以像这样检索可为 null 的 datetimeoffset 的月份:

DateTimeOffset? dt;
dt?.Value.Month;

但是,我真的很想知道 EF 是否能够翻译这个:

x => x.ApplyDate?.Month == f

转换为 SQL 表达式。我认为它将回退到内存中过滤。 其次,即使 EF 能够将其转换为 SQL 表达式,它也不是最佳的,因为可能不会使用可能在该列上定义的索引。

因此,我建议将您的 LINQ 表达式重写为如下内容:

x :> x.ApplyDate != null && x.ApplyDate >= new DateTimeOffset(someDate.Year, someDate.Month, 1) && x.ApplyDate <= new DateTimeOffset(someDate.Year, someDate.Month, daysInMonth)

(假设你想检索属于特定年份的特定月份的数据。如果你想检索属于某个月份的记录,而不考虑年份,我看没有其他选择)

DateTimeOffset?Nullable 类型,因此没有像 DateTimeOffset 那样重载 ToString(string format)

要从您的 DateTimeOffset? 中获取月份值,您可以

  1. x.ApplyDate.Value.ToString("MM")
  2. x.ApplyDate.Value.Month

请考虑您可能想要检查 ApplyDate.Value 是否为空 获取它的月份 属性

之前

您上面的代码显示的是 DateTime,而不是 DateTimeOffSet。

DateTimeOffSet 是 Struct,如果你有一个 nullable 值,你需要先检查值然后 从值部分得到月份

DateTimeOffSet myNullableDateTime = someValue...//

选项 1:

// notice I added value below

myNullableDateTime.HasValue? "?Month="+myNullableDateTime.EscapeDataString(myNullableDateTime.Value.ToString()):"")

选项 2:

if(myNullableDateTime.HasValue)
 {
    var Month = myNullableDateTime.Month
    TimeSpan difference = DateTimeOffset.Now.Subtract(myNullableDateTime.Value);
    // convert the difference to what you need and get Month 
 }

我还没有编译它,但它应该给你答案或非常接近。