12

LINQで遊んでいて、分単位でグループ化するのは簡単だろうかと思っていましたが、1分ごとではなく、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分ごとに結果をグループ化するにはどうすればよいですか?

4

2 に答える 2

14

n何かでグループ化するには、次の式を使用して「バケット」を作成できます。

((int)(total / bucket_size)) * bucket_size

これにより、合計が取得され、除算され、整数にキャストされて小数が削除されてから、再度乗算されます。これにより、.の倍数になりbucket_sizeます。したがって、たとえば(/整数除算であるため、キャストは必要ありません):

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 }
于 2012-08-21T18:23:26.367 に答える
-1

//データは3時間ごとに送信されます

where(Convert.ToDateTime(capcityprogressrow ["Data Captured Date"]。ToString())。Date!= DateTime.Now.Date ||(Convert.ToDateTime(capcityprogressrow ["Data Captured Date"]。ToString())。Date == DateTime.Now.Date &&(Convert.ToInt16(capcityprogressrow ["Data Captured Time"]))%3 == 0))group capcityprogressrow by new {WCGID = Convert.ToInt32(Conversions.GetIntEntityValue( "WCGID"、capcityprogressrow ))、WCGName = Conversions.GetEntityValue( "WIRECENTERGROUPNAME"、capcityprogressrow).ToString()、DueDate = Convert.ToDateTime(capcityprogressrow ["Data Captured Date"])、DueTime = capcityprogressrow ["Data Captured Time"]。ToString() }をWCGDateGroupに

//昇順のorderbyの場合

.OrderBy(x => x.WcgName).ThenBy(x => x.DataCapturedDateTime).ThenBy(x => x.DataCapturedTime).ToList();
于 2017-02-09T14:51:02.913 に答える