簡體   English   中英

查詢以根據時間戳條件提取數據

[英]Query to extract data based upon time stamp conditions

我正在構建ac#應用程序,它必須讀取以下格式的數據。

Column1     Column2     Column3         TimeStamp
   10           20         30       2017-04-25 14:15:00.000
   12           30         40       2017-04-25 14:15:15.000
   55           54         89       2017-04-25 14:15:30.000
   66           78         11       2017-04-25 14:15:45.000
   12           30         40       2017-04-25 14:16:00.000
   55           54         89       2017-04-25 14:16:15.000
   66           78         11       2017-04-25 14:16:30.000

時間戳記格式為

yyyy-mm-dd hh:mm:ss

每15秒記錄一次數據。 因此,任何連續兩行的時間戳之間的差應為15秒。

例如:假設我想讀取滿足以下時間戳條件的IN列3值。

  1. 時間戳差異(TimeDiff)
  2. 上限時間戳(TimeUpper)
  3. 下限時間戳(TimeLower)

    TimeDiff> = 30秒TimeUpper = 2017-04-25 14:16:30.000 TimeLower = 2017-04-25 14:15:30.000

並且輸出應如下所示

Column3
 89

整個想法是從數據庫中提取數據點的特定時間窗口(兩次時間戳之間),在其中我可以使用Timediff作為控制參數來調整我的readIN值。

我知道我可以在SQL Server中使用CTE來實現此邏輯,但是我對C#LINQ to SQL迷失了。

如何用C#編寫邏輯? 使用LINQ

任何建議,想法將非常有幫助

先感謝您。

        string delimiter = ",";

        string sTimeUpper = "2017-04-25 14:16:30.000";
        string sTimeLower = "2017-04-25 14:15:30.000";

        DateTime TimeUpper = DateTime.Parse(sTimeUpper);
        DateTime TimeLower = DateTime.Parse(sTimeLower);

        Console.WriteLine($"TimeLower = {TimeLower}");
        Console.WriteLine($"TimeUpper = {TimeUpper}");

        List<string> res = (File.ReadAllLines(@"TimeStamp.txt")
            .Skip(1)
            .Select(line => line.Split(delimiter.ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
            .Where(fields => DateTime.Parse(fields[3]) > TimeLower && DateTime.Parse(fields[3]) < TimeUpper)
            .Select(fields => string.Join(",", fields))
            .ToList<string>());

        Console.WriteLine("Requested readings:");

        foreach (string item in res)
        {
            Console.WriteLine(item);
        }

解決方案取決於您的需要。 我的是這樣的如果時間戳列已經是DateTime格式,那么您可以使用

int secondDiff = 30;
DateTime timeUpper = DateTime.Parse("2017-04-25 14:16:30.000");
DateTime timeLower = DateTime.Parse("2017-04-25 14:15:30.000");

List<string> results = yourContext.TableName.AsEnumerable()
    .Where(t => t.TimeStamp.AddSeconds(secondDiff) <= timeUpper && 
        t.TimeStamp.AddSeconds(-secondDiff) >= timeLower);
    .Select(t => t.Column3).ToList();
// Output is { 89 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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