【问题标题】:Difference between two dates - Cannot Convert type 'int?' to 'System.TimeSpan'两个日期之间的差异 - 无法转换类型“int?”到'System.TimeSpan'
【发布时间】:2019-01-14 08:45:45
【问题描述】:

我正在尝试获取两个日期之间的差异,但出现此错误:

无法转换类型“int?”到'System.TimeSpan'

然后我尝试使用Convert.ToInt32()Int32.Parse(),但仍然出现同样的错误。 任何人都可以帮助我或指出正确的方向吗?

视图模型:

 public class RMACLOSE
 {
     public TimeSpan? diff { get; set; }
 }

控制器:

var list = from RH in RMA_History
select new RMACLOSE 
{
    // Cannot Convert type 'int?' to 'System.TimeSpan?'
    diff = DbFunctions.DiffDays(RH.EndDate, RH.StartDate) 
}

RH.EndDate (DateTime): 2018-11-15 12:15:00.000
RH.StartDate (DateTime): 2018-05-24 15:43:00.000

差异:175 天

【问题讨论】:

  • 它抱怨你给它一个int?,而它想要一个TimeSpan?。为什么您认为产生 int 的方法会成为这里解决方案的一部分?你的问题是你有太多的开始。
  • 能否请您展示一下您的数据在RH.EndDate, RH.StartDate中的样子
  • 您已经按字面意思展示了除了最相关的代码部分之外的所有内容
  • @er-mfahhgk 我更新了我的问题:)
  • 我认为你需要日期和即175之间的区别,所以为什么你不能在RMACLOSE类中使用int?类型的diff属性所以可能是你的错误得到解决并且那么你不需要任何类型转换

标签: c# linq timespan


【解决方案1】:

我认为您需要两个日期之间的区别意味着 EndDateStartDate 和即 175

那么为什么你不能在 RMACLOSE 类中使用 int? 类型的 diff 属性

public class RMACLOSE
{
    public int? diff { get; set; }
}

可能是你的错误得到解决,然后你不需要任何类型转换,你只需使用你的 LINQ 查询,就像它一样

select new RMACLOSE 
{    
  diff = DbFunctions.DiffDays(RH.EndDate, RH.StartDate)   
}

DbFunctions.DiffDays 返回int?,因此它与您的diff 属性类型匹配,然后不会出现错误。

【讨论】:

    【解决方案2】:

    从错误消息中可以明显看出,DbFunctions.DiffDays() 返回一个int?(大概表示以天为单位的时差)。

    因此,您需要执行以下操作将其转换为TimeSpan?

    var days = DbFunctions.DiffDays();
    
    if (days != null)
        diff = TimeSpan.FromDays(days.Value);
    else
        diff = null;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 2014-02-12
      • 2015-09-14
      • 2015-06-21
      • 2020-02-06
      相关资源
      最近更新 更多