2015-05-07 88 views
-2

我想根据时间计算数据表dt的计数数据,我必须将计数存储在不同的变量上。如何计算计数?

样品DB:

ID File_Name Uploaded_Time 
----- --------- ------------- 
1   abc  3/18/2015 12:03:26 AM 
1   abc  3/18/2015 12:10:26 AM 
1   abc  3/18/2015 1:47:26 AM 
1   abc  3/18/2015 2:17:52 AM 
2   abc  3/18/2015 3:55:26 AM 
1   abc  3/18/2015 6:12:44 AM 
2   abc  3/18/2015 8:55:26 AM 
2   abc  3/18/2015 10:55:26 AM 
2   abc  3/18/2015 11:49:26 AM 
1  abc  3/18/2015 12:55:26 PM 
1  abc  3/18/2015 1:47:26 PM 
1  abc  3/18/2015 2:47:26 PM 
1  abc  3/18/2015 4:23:15 PM 
1  abc  3/18/2015 6:47:26 PM 
2  abc  3/18/2015 8:33:45 PM 

代码:

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 

CommunicationTableAdapters.tbl_splited_detailsTableAdapter sd; 
sd = new CommunicationTableAdapters.tbl_splited_detailsTableAdapter(); 
DataTable dt = new DataTable(); 
dt = sd.GetSiteUploadDetails(ddlSiteID.SelectedValue, txtDate.Text); 
foreach (DataRow row in dt.Rows) 
    { 
    if (dt.Rows.IndexOf(row) != 0) 
     { 
     string uplodedtime = (row["Uploaded_Time"].ToString()); 
     } 
    } 
} 

实施例:

计算计数在12:00:00 AM之间到1:00 :00 AM并存储在一个变量中。像这样,我想计算24小时计数并存储在24个变量中。

从上面的示例数据库,所需的输出是

variable count 
-------- ----- 
hour1  2 
hour2  1 
hour3  1 
hour4  1 
hour5  0 
hour6  0 
hour7  1 
hour8  0 
hour9  1 
hour10  0 
hour11  1 
hour12  1 
hour13  1 
hour14  1 
hour15  1 
hour16  0 
hour17  1 
hour18  0 
hour19  1 
hour20  0 
hour21  1 
hour22  0 
hour23  0 
hour24  0 
+1

创建一个包含24个元素的int数组,积累到您的循环中的数组[[hour_of_date]) –

回答

1

这应做到:

var result = 
     dt.AsEnumerable() 
      .GroupBy (x => x.Field<DateTime>("Uploaded_Time").Hour) 
      .Select (x => new { Hour = x.Key, Count = x.Count() }); 

如果你想以获取不存在的值0使用上述的表达与:

result = from hour in Enumerable.Range(0, 24) 
     join item in result on hour equals item.Hour into g 
     from item in g.DefaultIfEmpty() 
     select new 
     { 
      Hour = hour == 0 ? 24 : hour, 
      Count = item == null ? 0 : item.Count 
      }; 
+0

可能需要计算表中不会发生的小时数,如5或9. –

+1

@GrantWinney没错,但是这应该指向正确的方向 – Magnus

0

由于数据已经根据上传时间排序所以你可以做的是取5个变量并从上传时间colm中读取每个查询。

  • 1 VAR周一=字符串,直到第一个 '/'
  • 第二VAR天=第一个 '/' 和第二个 '/'
  • 3次变种之间串一年
  • 4变量小时时间
  • 和5前瞻小时的时间

所以在你疑问句这将是第一个查询

个变量
day = 18 
mon = 3 
year = 2015 
hour_initial = 12 
hour_ahead = 12 

和增量次数,直到hour_ahead变化或一天的变化。(以先到者为准),并上传数为特定小时

然后hour_intial改变为一个小时,并继续过程..... (这是基本技巧)