Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取具有特定数据的上一个元素(ASP.NET MVC)_C#_Asp.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

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

C# 获取具有特定数据的上一个元素(ASP.NET MVC),c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,我有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 {

我有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; }
}

如何计算差异?

您应该使用
DateTime
Ticks
属性,并将其传递给
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
} 
更新2:

注释中描述的问题更为复杂,要解决此问题,需要利用实际表中的记录Id/行标识符。假设id只是模型中的
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 
    }
}
var filteredQuery=query.Where(x=>x.DataType==1 | | x.DataType==2).OrderByDescending(x=>x.id);
for(int i=1;i
您可能需要根据需要调整循环中的条件

请记住,您可能会得到一个结果,
DateType==2
DataType==1
不对应,因为中间的数据可能有 已在数据库中删除。要解决此问题,只需检查
当前id是否等于前一个id+1
。这仅在id不是GUID类型(甚至不是顺序GUID)并且当然不是字母形式或由随机函数生成时才有效


嗯。我的问题主要是关于如何获得datatype==1和datatype==2的条目的CurDateTime。因为您可以看到,在这些条目之间,我可以得到datatype==0的条目。好的。过滤工作。现在,我有一个数据类型的列表,其顺序是1,2,1,2,所以我理解为2和1,1和2,2和1之间存在差异。我只需要在数据类型==1的情况下进行差异。在这一行中只有一个问题
var differenceInMinutes=new TimeSpan(differenceTicks)。TotalMinutes我有错误
错误CS1503参数1:无法从“System.TimeSpan”转换为“long”
 var filteredQuery = query.Where(x=> x.DataType == 1 || x.DataType == 2);
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 
    }
}