C# 获取具有特定数据的上一个元素(ASP.NET MVC)
我有db 这是屏幕 这是数据库的模型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 {
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
}
}