如何计算数?

时间:2015-05-07 13:47:17

标签: c# asp.net datatable count

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

示例数据库:

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到1:00:00之间的计数并存储在变量中。像这样我想计算24小时计数并存储在24变量中。

从上面的示例DB中,所需的输出是

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

2 个答案:

答案 0 :(得分: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
          };

答案 1 :(得分:0)

由于数据已根据上传时间进行排序,因此您可以采取5个变量并从上传时间列表中读取每个查询。

  • 1st var mon = string until first&#39; /&#39;
  • 第二个变量日=第一个&#39; /&#39;之间的字符串第二个&#39; /&#39;
  • 年度第3版
  • 小时时间的第四个变量
  • 和第5个变量用于预测小时时间

所以在你的问题中,这将是第一次查询

day = 18
mon =  3
year = 2015
hour_initial = 12
hour_ahead = 12

并递增计数,直到hour_ahead更改或当天更改。(这是第一次出现)和特定时间的上传计数

然后将hour_intial更改为下一个小时并继续该过程..... (这是基本技术)