C# 每n分钟分组一次
我和LINQ一起玩,我想知道按分钟分组有多容易,但我不想每分钟分组一次,而是想每5分钟分组一次 例如,目前我有: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
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();