为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
潇潇雨雨 2021-05-06 18:19:50
我正在构建ac#应用程序,其中它必须读取以下格式的数据。列1列2列3时间戳   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值。时间戳差异(TimeDiff)上限时间戳(TimeUpper)下限时间戳(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任何建议,想法将非常有帮助先感谢您。
查看完整描述

2 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

   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);

        }


查看完整回答
反对 回复 2021-05-16
  • 2 回答
  • 0 关注
  • 247 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信