【问题标题】:How to calculate count?如何计算计数?
【发布时间】:2015-05-07 13:47:16
【问题描述】:

我想根据时间从数据表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 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

【问题讨论】:

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

标签: c# asp.net datatable count


【解决方案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
          };

【讨论】:

  • @GrantWinney 是的,但这应该为他指明正确的方向
【解决方案2】:

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

  • 第一个 var mon = 字符串直到第一个 '/'
  • 2nd var day = 第一个'/'和第二个'/'之间的字符串
  • 一年第三个变量
  • 小时时间的第四个变量
  • 和第 5 个变量用于前瞻小时时间

所以在你的问题中,它会是第一个查询

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

并增加计数,直到 hour_ahead 更改或日期更改。(以先到者为准)并上传该特定小时的计数

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2010-11-02
    • 2011-11-12
    • 1970-01-01
    相关资源
    最近更新 更多