c# - LINQ:在 5 分钟内按日期范围分组
问题描述
假设我有以下项目和日期集合:
ItemID: 1, Date: 10/10/2018 11:30 AM
ItemID: 1, Date: 10/10/2018 11:32 AM
ItemID: 1, Date: 10/10/2018 11:33 AM
ItemID: 1, Date: 10/10/2018 11:34 AM
ItemID: 1, Date: 10/10/2018 11:57 AM
ItemID: 2, Date: 10/10/2018 7:45 AM
ItemID: 2, Date: 10/10/2018 7:49 AM
ItemID: 3, Date: 10/10/2018 8:45 AM
ItemID: 3, Date: 10/10/2018 9:13 AM
我想按 ItemID 和 Date 分组,但我希望他们按彼此相隔 5 分钟内的日期分组
在上面的数据集中,以下将被分组
ItemID: 1, Date: 10/10/2018 11:30 AM <-- Grouped with Item 1
ItemID: 1, Date: 10/10/2018 11:32 AM <-- Grouped with Item 1
ItemID: 1, Date: 10/10/2018 11:33 AM <-- Grouped with Item 1
ItemID: 1, Date: 10/10/2018 11:34 AM <-- Grouped with Item 1
ItemID: 1, Date: 10/10/2018 11:57 AM <-- Not Grouped
ItemID: 2, Date: 10/10/2018 7:45 AM <-- Grouped with Item 2
ItemID: 2, Date: 10/10/2018 7:49 AM <-- Grouped with Item 2
ItemID: 3, Date: 10/10/2018 8:45 AM <-- Not Grouped
ItemID: 3, Date: 10/10/2018 9:13 AM <-- Not Grouped
被分组的是彼此相距 5 分钟以内的那些。
我知道如何在 LINQ 中按 ItemID 和 Date 对它们进行分组,但我很难按照我描述的方式对它们进行分组。
到目前为止我已经尝试过:
var groupedItems = from item in items
group item by new
{
item.ItemID,
item.Date
} into g
select g;
解决方案
你可以尝试这样的事情:
var groupedItems = items
.GroupBy(i => i.ItemId, (k, g) => g
.GroupBy(i => (long)new TimeSpan(i.Date.Ticks - g.Min(e => e.Date).Ticks).TotalMinutes / 5))
.SelectMany(g => g);
推荐阅读
- http - 获取 java.net.SocketException:连接重置,在 Apache 骆驼路由中进行 http4 调用期间
- java-8 - 为什么一次调用会执行两次 Observable 功能?
- c++ - 解析器如何处理预处理器和条件编译?
- apache - 我可以将 Apache 重写存储在 Web 根目录中的 .htaccess 的单独文件中吗?
- android - CardView 阴影未显示
- react-native - React Native:如何使用 react-native 导航在 bottomTabs 中实现 topTabs
- java - 如何在java中运行comport代码而不在linux系统中物理运行
- batch-file - FFmpeg - 批量文件批量编辑
- javascript - 我似乎无法在 javascript/typescript 的数组中更新对象字段的值?
- java - Eclipse Gradle 项目:JAXB 不会从嵌套的 WSDL 文件创建 java 类