C# LINQ GroupBy匿名类型并选择位于+;/-一分钟

C# LINQ GroupBy匿名类型并选择位于+;/-一分钟,c#,.net,linq,datetime,group-by,C#,.net,Linq,Datetime,Group By,我有一个答案列表,通过匹配FormId,然后是ProductInstance,最后是时间戳,我将这些答案分为几组,如下所示: var groups = answersForCustomerList.GroupBy(x => new { x.FormId, x.ProductInstance, x.TracingData.Timestamp }); 这给了我这样的群体: FormId = {97748e5e-be41-4d53-9ef8-f0dc150e58b6}, ProductInst

我有一个答案列表,通过匹配FormId,然后是ProductInstance,最后是时间戳,我将这些答案分为几组,如下所示:

var groups = answersForCustomerList.GroupBy(x => new { x.FormId, x.ProductInstance, x.TracingData.Timestamp });
这给了我这样的群体:

FormId = {97748e5e-be41-4d53-9ef8-f0dc150e58b6}, ProductInstance = "kontot", Timestamp = {2016-12-20 16:00:00}
FormId = {87dd356b-2770-4427-89d2-7503ee80bb1c}, ProductInstance = "Lån", Timestamp = {2016-12-20 16:02:00} 
FormId = {87dd356b-2770-4427-89d2-7503ee80bb1c}, ProductInstance = "Lån", Timestamp = {2016-12-20 16:01:00} 
FormId = {97748e5e-be41-4d53-9ef8-f0dc150e58b6}, ProductInstance = "Konto", Timestamp = {2016-12-20 15:00:00}
FormId = {87dd356b-2770-4427-89d2-7503ee80bb1c}, ProductInstance = "Lån", Timestamp = {2016-12-20 15:59:00}

但我需要做的,似乎无法理解的是如何将+/-1分钟内的时间戳分组到同一组中。因此,使用相同的FormId和ProductInstance,但时间戳为16:01:00或15:59:00的答案与16:00:00的答案在同一组中。

我成功地通过以下方法获得了我想要的结果:

 var groups = answersForCustomer
            .GroupBy(x =>
            {
                var stamp = x.TracingData.Timestamp;
                stamp = stamp.AddMinutes(-(stamp.Minute % 2));
                stamp = stamp.AddMilliseconds(-stamp.Millisecond - 1000 * stamp.Second);
                return new { stamp, x.FormId, x.ProductInstance };
            });

这给了我两分钟的时间,感谢所有的答案

16:02:00应该是同一组,还是新组?还有,结果中应该包含哪个时间戳值?因此15:58:59属于不同于15:59:00的组,即使是+-1分钟?是的,16:02:00和15:58:59应该属于不同的组,结果中应该包含的时间戳可能是最新的时间戳抱歉,这个问题可能描述得有点糟糕,我已经更新了,你可以按日期、小时、分钟除以3分组。这将00、01和02分钟分组,然后是03、04和05分钟,依此类推。否则,您需要使用更复杂的方法来确定应该分组的内容。