[英]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值。
下限時間戳(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.