我有db。
这是屏幕
这是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();
}
我如何计算差异?
答案 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)时才有效,当然不是以字母形式或由随机函数生成。