如何通过" 00:00:00"如果timepan中的值为null?

时间:2018-04-12 06:35:35

标签: c# linq null timespan

我想把我的timespan加起来。我的逻辑工作得很好,他唯一的问题是如果值是NULL那么我的应用程序就会中断。我想通过" 00:00:00"如果值为NULL,则为我的时间跨度。我的以下代码无效:

@Model.Sum(x=> TimeSpan.Parse(x.Time ?? "00:00:00").Minutes)

X.Timestring,我的逻辑可能是NULL。如果是NULL,我想用00:00:00替换它

我做错了什么?

6 个答案:

答案 0 :(得分:2)

我想你想要总计分钟数,所以你只需要检查空值并在总数中加0:

@Model.Sum(x=> !string.IsNullOrEmpty(x.Time) ? TimeSpan.Parse(x.Time).TotalMinutes : 0)

答案 1 :(得分:1)

除了检查所有值是否为空之外,您可以先过滤,以便只有空值。

@Model.Where(x => !string.IsNullOrEmpty(x.Time)).Sum(x=> TimeSpan.Parse(x.Time).Minutes)

答案 2 :(得分:1)

TimeSpan.Parse方法expects a parameter in the form

[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]

因为00:00:00是一个有效的输入字符串,所以我在这里猜测它并不是null值,而是在x.Time设置时发生错误通过DateTime.Now.ToString()等,因为在那些情况下你得到了

  

System.FormatException:'字符串未被识别为有效的TimeSpan。'

Time null您的代码完全正常。请确保其他值有效。

答案 3 :(得分:1)

您的问题的问题在于,根据您的说法,代码应该有效。例如,以下代码可以正常工作:

using System;
using System.Collections.Generic;
using System.Linq;

namespace Demo
{
    class Test
    {
        public string Time;
    }

    class Program
    {
        static void Main()
        {
            var Model = new List<Test>
            {
                new Test{Time = "01:01:01"},
                // null, // Uncomment this line to make it crash.
                new Test{Time = null}, 
                new Test{Time = "02:02:02"}
            };

            int result = Model.Sum(x => TimeSpan.Parse(x.Time ?? "00:00:00").Minutes);

            Console.WriteLine(result);
        }
    }
}

由于您说错误正在发生,因此必然会出现其他问题。我认为问题是x本身是空的。

我们可以通过取消注释指示的行来证明这种可能性。如果你这样做,程序将崩溃。

如果这确实是问题,那么解决方案非常简单;只需将总和更改为:

int result = Model.Sum(x => TimeSpan.Parse(x?.Time ?? "00:00:00").Minutes);

进行更改后,空x不会使其崩溃。

请注意,写一下可能稍微好一点:

int result = Model.Sum(x => x?.Time != null ? TimeSpan.Parse(x.Time).Minutes : 0 );

因为那样你就不会解析"00:00:00"只返回零(通过.Minutes),但如果有的话,差异很可能很小。

答案 4 :(得分:0)

由于xnull,您将获得空例外。因此,当您调用属性x.Time时,它将抛出NullReferenceException。您可以使用三元运算符检查x是否为null

 @Model.Sum(x => TimeSpan.Parse(x == null ? "00:00:00" : x.Time).Minutes)

答案 5 :(得分:0)

尝试这个

时间跨度?变量=(TimeSpan?)为空。

此值返回空值。