[英]Get previous element with specific data (ASP.NET MVC)
我有数据库。
这是屏幕
这是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();
}
我如何计算差异?
您应该使用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
}
更新:
要使用DataType
属性过滤查询,您应该调用.Where(...)
方法,您可以这样使用它:
var filteredQuery = query.Where(x=> x.DataType == 1 || x.DataType == 2);
更新 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
}
}
您可能需要根据您的需要调整循环中的条件。
请记住,您可能会得到一个结果,其中
DateType == 2
可能与DataType == 1
不对应,因为它们之间的数据可能已在数据库中删除。 要解决这个问题,只需检查current id is equal to previous id + 1
。 这仅适用于 id 不是 GUID 类型(甚至不是顺序 GUID)并且当然不是字母形式或由随机函数生成的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.