C# 每n分钟分组一次

C# 每n分钟分组一次,c#,linq,C#,Linq,我和LINQ一起玩,我想知道按分钟分组有多容易,但我不想每分钟分组一次,而是想每5分钟分组一次 例如,目前我有: var q = (from cr in JK_ChallengeResponses where cr.Challenge_id == 114 group cr.Challenge_id by new { cr.Updated_date.Date, cr.Updated_date.Hour, cr.Updated_date.Mi

我和LINQ一起玩,我想知道按分钟分组有多容易,但我不想每分钟分组一次,而是想每5分钟分组一次

例如,目前我有:

var q = (from cr in JK_ChallengeResponses
        where cr.Challenge_id == 114
        group cr.Challenge_id 
            by new { cr.Updated_date.Date, cr.Updated_date.Hour, cr.Updated_date.Minute } 
            into g 
        select new {
          Day = new DateTime(g.Key.Date.Year, g.Key.Date.Month, g.Key.Date.Day, g.Key.Hour, g.Key.Minute, 0),
          Total = g.Count()
        }).OrderBy(x => x.Day);


我需要做什么才能将每5分钟的结果分组?

要按
n
对某个内容进行分组,可以使用以下公式创建“bucket”:

这将取总数,除以它,转换为整数以去掉任何小数,然后再次相乘,最后得到桶大小的倍数。例如(
/
是整数除法,所以不需要强制转换):


//数据每3小时一次

其中(Convert.ToDateTime(capcityprogressrow[“数据捕获日期”].ToString()).Date!=DateTime.Now.Date | |(Convert.ToDateTime(capcityprogressrow[“数据捕获日期”].ToString()).Date==DateTime.Now.Date&(Convert.ToInt16(capcityprogressrow[“数据捕获时间”)%3==0)) 按新的{WCGID=Convert.ToInt32(Conversions.GetIntEntityValue(“WCGID”,capcityprogressrow)),WCGName=Conversions.GetEntityValue(“WIRECENTERGROUPNAME”,capcityprogressrow).ToString(),DueDate=Convert.ToDateTime(capcityprogressrow[“数据捕获日期”]),DueTime=capcityprogressrow[“数据捕获时间”]。ToString()}对capcityprogressrow进行分组进入WCGDateGroup

//对于具有发送订单的orderby

.OrderBy(x => x.WcgName).ThenBy(x => x.DataCapturedDateTime).ThenBy(x => x.DataCapturedTime).ToList();

这对LINQ有用吗?我得到了
匿名类型的成员必须使用成员分配、简单名称或成员访问权限声明。
因为
by new
需要一个简单的名称,而不是条件…我认为您需要为Minute属性指定一个名称,例如Minute=(cur.Updated_Date.Minute/5)*5是的,我错过了那部分。我在测试代码中有一个属性的名称,它工作得很好。我将在LinqPad中更新.works,但在使用实体时,我得到
在LinqTo实体中只支持无参数构造函数和初始值设定项。
。。。因此,我不能使用
Minutes=
@abatishchev:正如帖子中所解释的,
/
会导致整数除法,所以如果你先进行整数除法,然后再乘以某个数
n
,这相当于四舍五入到
n
的最近倍数。用一个具体的例子来理解我的意思。如果你用
13/5
得到
2
,然后用
2*5
得到
10
。实际上,
13
四舍五入到
5
的最接近倍数将是
10
。这是一种将数字有效地分组到
n
大小的桶中的“黑客行为:)
group cr.Challenge_id
    by new { cr.Updated_Date.Year, cr.Updated_Date.Month, 
             cr.Updated_Date.Day, cr.Updated_Date.Hour,
             Minute = (cr.Updated_Date.Minute / 5) * 5 }
.OrderBy(x => x.WcgName).ThenBy(x => x.DataCapturedDateTime).ThenBy(x => x.DataCapturedTime).ToList();