计算datetime之间的差异并转换为int

时间:2017-10-17 11:32:15

标签: c# datetime

我在DateTime

之间有区别

我在模型中计算

public partial class Park
{
    public int parkId { get; set; }
    public decimal Longitude { get; set; }
    public decimal Latitude { get; set; }
    public Nullable<System.DateTime> TimeStart { get; set; }
    public Nullable<System.DateTime> TimeEnd { get; set; }
    [NotMapped]
    public TimeSpan? Difference { get { return TimeEnd - TimeStart; } }
}

在此之后我将其称为后端

 var items = ctx.Parks.AsEnumerable().Select(
                x => new {
                    lng = x.Longitude,
                    lat = x.Latitude,
                    difference = x.Difference
                }).ToList();

但我得到了这个{ lng = 50.4558539000, lat = 30.5148783000, difference = {00:05:00} }

如果我使用TotalMinutes,请使用此

  

严重级代码描述项目文件行抑制状态   错误CS1061&#39; TimeSpan?&#39;不包含&#39; TotalMinutes&#39;的定义没有扩展方法&#39; TotalMinutes&#39;接受类型&#39; TimeSpan的第一个参数?&#39;可以找到(你错过了使用指令或程序集引用吗?)GoogleMapsAsp_Net C:\ Users \ nemes \ source \ repos \ GoogleMapsAsp_Net \ GoogleMapsAsp_Net \ Controllers \ HomeController.cs 28 Active

但我需要int中的分钟差异,我该怎么做?

2 个答案:

答案 0 :(得分:1)

基本上你可以这样做:

difference = (int?)(x.Difference?.TotalMinutes)

在这种情况下,你的答案将是一个可以为空的int(int?),因此它将支持差异为null的可能性(在这种情况下为null)。

或者,如果您需要在这种情况下使用默认值,请说-1,请执行以下操作:

difference = (int)(x.Difference?.TotalMinutes ?? -1)

进一步阅读:

  1. Null propagation operator
  2. ?? operator

答案 1 :(得分:-3)

您可以使用TimeSpan的{​​{3}} / TotalSeconds / etc属性。

 var items = ctx.Parks.AsEnumerable().Select(
                x => new {
                    lng = x.Longitude,
                    lat = x.Latitude,
                    difference = x.Difference.TotalSeconds //Just add .TotalSeconds
                }).ToList();

请注意,您必须将TimeSpan?转换为TimeSpan