获取具有特定数据的上一个元素(ASP.NET MVC)

时间:2017-10-25 10:25:16

标签: c# asp.net asp.net-mvc entity-framework

我有db。

这是屏幕

enter image description here

这是db的模型。

public partial class Logging
{
    public string Imei { get; set; }
    public DateTime CurDateTime { get; set; }
    public Nullable<System.DateTime> GPSDateTime2 { get; set; }
    public Nullable<decimal> Latitude2 { get; set; }
    public Nullable<decimal> Longitude2 { get; set; }
    public int Speed { get; set; }
    public Nullable<int> Datatype { get; set; }
    public int Id { get; set; }
}

我需要找到datatype == 1和前一个元素datatype == 2

之间的分钟数差异

在后端我创建此代码以获取表中的所有数据

using (var ctx = new GoogleMapTutorialEntities())
{
    var allitems = ctx.Loggings.AsEnumerable().Select(
            x => new Logging
            {
                Longitude2 = x.Longitude2,
                Latitude2 = x.Latitude2,
                CurDateTime = x.CurDateTime,
                Datatype = x.Datatype

            }).ToList(); 
}

我如何计算差异?

1 个答案:

答案 0 :(得分:1)

您应该使用Ticks的{​​{1}}属性并将其传递给DateTime,以获得以分钟为单位的时差(TimeSpan)。例如:

TotalMinutes

更新:

要使用for(int i = 1; i < yourQuery.Count; i++){ var differenceTicks = yourQuery[i].CurDateTime.Ticks - yourQuery[i-1].CurDateTime.Ticks; var differenceInMinutes = new TimeSpan(differenceTicks).TotalMinutes; // You can assign this value to any property within your list or // to another list } 属性过滤查询,您应该调用DataType方法,然后以这种方式使用它:

.Where(...)

更新2:

您在评论中描述的问题更复杂,要解决此问题,您需要利用实际表中的记录ID /行标识符。假设id只是模型中的 var filteredQuery = query.Where(x=> x.DataType == 1 || x.DataType == 2); 属性,可以按如下方式完成:

id

您可能需要根据您的具体需要调整循环中的条件。

  

请注意,您可能会得到var filteredQuery = query.Where(x=> x.DataType == 1 || x.DataType == 2).OrderByDescending(x=> x.id); for(int i = 1; i < filteredQuery.Count; i++){ if(filteredQuery[i].DataType == 2 && filteredQuery[i-1].DataType == 1){ // Then calculate the difference as described } } 可能会得到的结果   与DateType == 2不对应,因为两者之间的数据可能有   已在数据库中删除。要解决此问题,只需检查是否DataType == 1。这仅在id不是GUID类型(甚至不是顺序GUID)时才有效,当然不是以字母形式或由随机函数生成。