查询以基于时间戳条件提取数据

时间:2018-04-26 08:00:10

标签: c# sql-server linq

我正在构建一个c#应用程序,它必须以下列格式读取数据。

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秒。

例如:假设我想读取满足以下时间戳条件的第3列值。

  1. 时间戳差异(TimeDiff)
  2. 上限TimeStamp(TimeUpper)
  3. 下限TimeStamp(TimeLower)

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

  4. ,输出应该如下所示

    Column3
     89
    

    整个想法是从数据库中提取数据点的某个时间窗口(在两次时间戳之间),我可以使用Timediff作为我的控制参数调整我读取的值。

    我知道我可以在SQL服务器中使用CTE来实现这个逻辑,但我已经失去了C#LINQ to SQL。

    如何在C#中编写逻辑?使用LINQ

    任何建议,想法都会非常有用

    提前谢谢。

2 个答案:

答案 0 :(得分:0)

called

答案 1 :(得分:0)

解决方案取决于您的需要。我的是这样的 如果timestamp列已经是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 }