两个日期之间的差异-无法转换类型'int?'到“ System.TimeSpan”

时间:2019-01-14 08:45:45

标签: c# linq timespan

我试图获取两个日期之间的差额,但出现此错误:

  

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

然后,我尝试使用Convert.ToInt32()Int32.Parse(),但仍然出现相同的错误。 谁能帮助我或为我指明正确的方向?

ViewModel:

 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.EndDateDateTime):2018-11-15 12:15:00.000
RH.StartDateDateTime):2018-05-24 15:43:00.000

差异:175天

2 个答案:

答案 0 :(得分:1)

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

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

var days = DbFunctions.DiffDays();

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

答案 1 :(得分:1)

我认为您需要两个日期均值const UserLoggedIn = (req, res, next) => { if (req.user) next (); else res.redirect("/login") } const UserNotLoggedIn = (req, res, next) => { if (!req.user) next(); else res.redirect("/home") } EndDate之间的差,即StartDate

所以为什么不能在175类之内使用int?类型的diff属性,如

RMACLOSE

可能是您的错误已解决,然后您不需要任何类型转换,而只是使用LINQ查询,就像这样

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

select new RMACLOSE { diff = DbFunctions.DiffDays(RH.EndDate, RH.StartDate) } 返回DbFunctions.DiffDays,因此它与您的int?属性类型匹配,因此不会出现任何错误。