C# 使用LINQ C按小时间隔聚合值
我从API获得了以下JSON结果C# 使用LINQ C按小时间隔聚合值,c#,linq,aggregate-functions,C#,Linq,Aggregate Functions,我从API获得了以下JSON结果 [ { "ID": "1", "Value" : "10", "TimeStamp": "2019-10-21 00:00:00" }, { "ID": "1", "Value": "10", "TimeStamp": "2019-10-21 00:15:00" }, { "ID": "1",
[
{
"ID": "1",
"Value" : "10",
"TimeStamp": "2019-10-21 00:00:00"
},
{
"ID": "1",
"Value": "10",
"TimeStamp": "2019-10-21 00:15:00"
},
{
"ID": "1",
"Value": "10",
"TimeStamp": "2019-10-21 00:30:00"
},
{
"ID": "1",
"ResultValue": "10",
"TimeStamp": "2019-10-21 00:45:00"
},
{
"ID": "1",
"Value": "20",
"TimeStamp": "2019-10-21 01:00:00"
},
{
"ID": "1",
"Value": "10",
"TimeStamp": "2019-10-21 01:15:00"
},
{
"ID": "1",
"Value": "10",
"TimeStamp": "2019-10-21 01:30:00"
},
{
"ID": "1",
"Value": "10",
"TimeStamp": "2019-10-21 01:45:00"
},
{
"ID": "1",
"Value": "30",
"TimeStamp": "2019-10-21 02:00:00"
}
]
我试图使用下面的LINQ查询显示每小时的聚合
结果是
ID : 1
TotalValue : 40
TimeStamp : 21.10.2019 00:00:00
ID : 1
TotalValue : 50
TimeStamp : 21.10.2019 01:00:00
<> P>我的LINQ查询应该是什么,如果我想每小时聚合考虑第十五分钟而不是零分钟。
就像第一个小时应该有
2019-10-21 00:15:00 - 10
2019-10-21 00:30:00 - 10
2019-10-21 00:45:00 - 10
2019-10-21 01:00:00 - 20
而预期的结果应该是
您可以移动时间戳以获得效果。而不是
items.GroupBy(u => new { u.ID, u.TimeStamp.Date, u.TimeStamp.Hour })
您将过去用于分组的时间改为15分钟,因此一小时前15分钟的所有内容都将转到较早的一小时
items.GroupBy(u => new { u.ID, u.TimeStamp.AddMinutes(-15).Date, u.TimeStamp.AddMinutes(-15).Hour })
您可以移动时间戳以获得效果。而不是
items.GroupBy(u => new { u.ID, u.TimeStamp.Date, u.TimeStamp.Hour })
您将过去用于分组的时间改为15分钟,因此一小时前15分钟的所有内容都将转到较早的一小时
items.GroupBy(u => new { u.ID, u.TimeStamp.AddMinutes(-15).Date, u.TimeStamp.AddMinutes(-15).Hour })
<如果我想每小时聚集考虑第十五分钟而不是零分钟。你可以在一小时内增加15分钟,然后再分组
public class ApiResult
{
public int ID { get; set; }
public int Value { get; set; }
public DateTime TimeStamp { get; set; }
}
var result = JsonConvert.DeserializeObject<IList<ApiResult>>(File.ReadAllText("../../../data.json"));
var AggValues = result.GroupBy(x => new
{
x.ID,
x.TimeStamp.AddMinutes(15).Date,
x.TimeStamp.AddMinutes(15).Hour,
x.Value
}).Select(x => new ApiResult
{
ID = x.Key.ID,
TimeStamp = x.Key.Date.AddHours(x.Key.Hour),
Value = x.Sum(sum => sum.Value)
});
foreach(var i in AggValues)
{
Console.WriteLine(i.ID + " " + i.Value + " " + i.TimeStamp);
}
<如果我想每小时聚集考虑第十五分钟而不是零分钟。你可以在一小时内增加15分钟,然后再分组
public class ApiResult
{
public int ID { get; set; }
public int Value { get; set; }
public DateTime TimeStamp { get; set; }
}
var result = JsonConvert.DeserializeObject<IList<ApiResult>>(File.ReadAllText("../../../data.json"));
var AggValues = result.GroupBy(x => new
{
x.ID,
x.TimeStamp.AddMinutes(15).Date,
x.TimeStamp.AddMinutes(15).Hour,
x.Value
}).Select(x => new ApiResult
{
ID = x.Key.ID,
TimeStamp = x.Key.Date.AddHours(x.Key.Hour),
Value = x.Sum(sum => sum.Value)
});
foreach(var i in AggValues)
{
Console.WriteLine(i.ID + " " + i.Value + " " + i.TimeStamp);
}
相关的:相关的:这班从一天的前15分钟到当天的23小时,而它实际上应该属于前一天。这班从一天的前15分钟到当天的23小时,而它实际上应该属于前一天。
1 30 2019-10-21 00:00:00
1 0 2019-10-21 01:00:00
1 20 2019-10-21 01:00:00
1 20 2019-10-21 01:00:00
1 10 2019-10-21 02:00:00
1 30 2019-10-21 02:00:00