C# 使用LINQ C聚合值和时间#
我从API获得了以下JSON结果C# 使用LINQ C聚合值和时间#,c#,list,linq,C#,List,Linq,我从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": "10",
"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": "0",
"TimeStamp": "2019-10-21 02:00:00"
}
]
我正在尝试反序列化并写入列表,然后聚合这些值
var items = JsonConvert.DeserializeObject<List<TestData>>(JSONResult).ToList();
var aggList = items.GroupBy(u=> new { u.ID,u.TimeStamp}).Select(g => new TestData { ID = g.Key.ID,TimeStamp = g.Key.TimeStamp ,TotalValue = g.Sum(k =>K.Value)}).ToList();
您可以同时使用
GroupBy
Date和Hour:
var aggList = items.GroupBy(u => new { u.ID, u.TimeStamp.Date, u.TimeStamp.Hour })
.Select(g => new TestData
{
ID = g.Key.ID,
TimeStamp = g.Key.Date.AddHours(g.Key.Hour),
Value = g.Sum(k => k.Value)
}).ToList();
它将为您提供以下结果:
ID : 1
TotalValue : 30
TimeStamp : 21.10.2019 00:00:00
ID : 1
TotalValue : 40
TimeStamp : 21.10.2019 01:00:00
ID : 1
TotalValue : 0
TimeStamp : 21.10.2019 02:00:00
为什么其中一个元素的ID是ResultValue而不是Value?仅按时间戳的日期部分和时间戳的小时分组。。。如果你用英语在纸上写下你想写的东西,那就很明显了。GroupBy就是你贴的代码中的一个打字错误?GroupBy use OrderBy date之前不应该是
testList
。看起来你不需要按日期分组。@Selvin谢谢你的建议。让我尝试按时间戳日期和小时进行分组。如果我的聚合值从15分钟开始,而不是从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”,“结果值”:“10”,“时间戳”:“2019-10-21 00:45:00”},{“ID”:“1”,“值”:“10”,“时间戳”:“2019-10-21 01:00:00”}
ID : 1
TotalValue : 30
TimeStamp : 21.10.2019 00:00:00
ID : 1
TotalValue : 40
TimeStamp : 21.10.2019 01:00:00
ID : 1
TotalValue : 0
TimeStamp : 21.10.2019 02:00:00