c# - 使用 LINQ 创建数据间隔

标签 c# linq grouping average

我在 C# 中遇到一个问题,我不知道如何解决:

我有一组由时间戳和值组成的数据。 这是一个示例数据集:

<Timestamp>2014-01-06T17:40:08.000Z</TimeStamp>
<Value>200</Value>
<Timestamp>2014-01-06T17:40:09.000Z</TimeStamp>
<Value>234</Value>
<Timestamp>2014-01-06T17:40:11.000Z</TimeStamp>
<Value>214</Value>
<Timestamp>2014-01-06T17:40:12.000Z</TimeStamp>
<Value>264</Value>
<Timestamp>2014-01-06T17:40:13.000Z</TimeStamp>
<Value>300</Value>
<Timestamp>2014-01-06T17:40:15.000Z</TimeStamp>
<Value>276</Value>

我需要做的是以某种方式每 30 秒获取一次值的平均值。请注意,数据记录不一定是每秒记录。这让我很难想象如何在不保证结果不安全的情况下做到这一点。

这可以通过 LINQ 语句实现吗?或者您还有其他建议吗?

最佳答案

假设您可以弄清楚如何解析 XML,并且您有一个包含 TimeValue 的对象集合。例如,我将使用这个集合:

var now = DateTime.Now;
var random = new Random();
var times = Enumerable.Range(1, 10000).Select(i => new
{
    Time = now.AddHours(random .NextDouble()),
    Value = i
});

使用辅助方法 DateTime RoundUp(DateTime dt, TimeSpan d) ,和GroupBy :

var interval = TimeSpan.FromSeconds(30);
var intervalAverageValues =
    times.GroupBy(t => RoundUp(t.Time, interval))
         .Select(g => new
         {
             AverageValue = g.Average(t => t.Value),
             IntervalEndTime = g.Key,
             Count = g.Count()
         });

关于c# - 使用 LINQ 创建数据间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21258167/

相关文章:

c# - 如何在 .NET Core 上注册新的 NuGet 包源?

C# LINQ Orderby - 真/假如何影响 orderby?

php - 捆绑一组通知

c# - ODBC 错误 - 未找到数据源名称且未指定默认驱动程序

c# - 将 C# arraylist 传递给 Javascript

c# - 当用户已经登录时,如何重定向到未授权页面而不是登录页面?

c# - 如何把这个 Func 变成一个表达式?

c# - 使用 Joiner 表从 3 个表进行 Linq 查询

python - 如何在Python中根据属性对二维列表进行分组?

MySQL 对不同的行进行分组以创建组和简单产品