Разница между двумя датами - невозможно преобразовать тип 'int?' в System.TimeSpan - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь получить разницу между двумя датами, но я получаю эту ошибку:

Не удается преобразовать тип 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.EndDate (DateTime): 2018-11-15 12: 15: 00.000
RH.StartDate (DateTime): 2018-05-24 15: 43: 00.000

Разница: 175 дней

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Я думаю, вам нужна разница между обоими значениями даты EndDate и StartDate и т. Е. 175,

Так почему вы не можете использовать int? тип diff свойства внутри RMACLOSE класса, подобного

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

И, возможно, ваша ошибка будет решена, и тогда вам не понадобится приведение типов, и вы просто используете свой запрос LINQ в том виде, как он

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

DbFunctions.DiffDays возвращает int?, поэтому он соответствует вашему типу свойства diff, и тогда ошибки не останутся.

0 голосов
/ 14 января 2019

Из сообщения об ошибке видно, что DbFunctions.DiffDays() возвращает int? (который предположительно представляет разницу во времени в днях).

Поэтому вам нужно будет сделать что-то подобное, чтобы преобразовать это в TimeSpan?:

var days = DbFunctions.DiffDays();

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