簡體   English   中英

獲取具有特定數據的上一個元素 (ASP.NET MVC)

[英]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(); 
}

我如何計算差異?

您應該使用DateTimeTicks屬性並將其傳遞給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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM