如何获取Datetimeoffset的值月份?

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

这使我返回错误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);

此返回null

      int d = DateTime.Now.Month;
      string f = d.ToString();
      var s = _dbContext.Documents.FirstOrDefault(x => x.ApplyDate.Value.ToString("MM") == f);
      return Json(s);
yandongyi 回答:如何获取Datetimeoffset的值月份?

您可以像这样检索可为空的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,daysInMonth)

(鉴于您要检索特定年份中特定月份的数据。如果您想要检索特定月份中的记录,而与年份无关,我看不到其他选择)

,

DateTimeOffset?Nullable类型,因此没有ToString(string format)那样的DateTimeOffset超载。

可以从DateTimeOffset?获取月份值

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

请考虑获取其“月份”属性之前,请检查ApplyDate.Value是否为空

,

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

DateTimeOffSet是Struct,如果您有一个可空值,则需要先检查该值,然后从值部分中获取月份

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 
 }

我还没有编译它,但是它应该可以为您解答或相当接近。

本文链接:https://www.f2er.com/2624185.html

大家都在问